Еще один случай, когда пробелы имеют значение (может быть?)

Это еще один случай, когда пробел имеет значение в 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()
{}

10

Решение

Это тот случай, когда пробелы имеют значение. Компилятор будет соответствовать наибольшему символу, который может >=, Пробелы заставляют его анализировать, как вы и предполагали.

18

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]