Сегодня я нашел фрагмент кода, эквивалентный следующему:
enum X
{
x1 = 0,
x2 = 1
};
template<typename T>
void bar(T obj, X x = x3) { }
// ^^
// This identifier is bogus!
int main() { }
Оба VC10 и VC12 счастливо скомпилируют его. Оба clang 3.4 и GCC 4.8.1 отклоняют его (что я и ожидал).
Является ли это ошибкой, или поведение VC действительно разрешено Стандартом? Если да, то какие соответствующие пункты?