GCC v6.1 (результат тот же с v5.1) успешно компилирует код ниже с флагами -std=c++11 -Wall -Wextra -Wpedantic
, но выдает это предупреждение:
variable templates only available with -std=c++14 or -std=gnu++14
Код:
#include <iostream>
template <typename T>
struct ParamMetadata {
T min;
T max;
};
template <class T1, class T2>
class FooMap {};
template <typename T>
// WARNING PRODUCED ON THIS LINE
extern FooMap<int, ParamMetadata<T> > metadataHashmap;
int main() {
return 0;
}
Clang v3.8 создает аналогичное предупреждение:
variable templates are a C++14 extension [-Wc++14-extensions]
Если это функция, доступная только в С++ 14, почему она скомпилирована с флагом С++ 11, и я могу запустить исполняемый файл? Не должно ли это быть фатальной ошибкой?