10

これは、C ++で空白が重要な別のケースですか、それともコンパイラのバグですか?次のコードは構文的に正しいですか?

#include <type_traits>

template <bool cond>
using EnableIf = typename std::enable_if<cond, int>::type;

template <int n, EnableIf<n == 1>=0>
void func()
{}

Intel C ++ Composerは、「型指定子の無効な組み合わせ」と言ってコンパイルに失敗します。ただし、署名に単一の空白を追加すると、正常にコンパイルされます。

template <int n, EnableIf<n == 1> =0>
void func()
{}
4

1 に答える 1

18

空白が重要な場合です。コンパイラは可能な限り最大のシンボルと一致するため、一致し>=ます。空白により、意図したとおりに解析されます。

于 2012-12-19T11:33:35.667 に答える