Это еще один случай, когда пробел имеет значение в 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()
{}
Это тот случай, когда пробелы имеют значение. Компилятор будет соответствовать наибольшему символу, который может >=
, Пробелы заставляют его анализировать, как вы и предполагали.
Других решений пока нет …