Стандарт ISO 98/03 (раздел 14.3.1), по-видимому, запрещает использование типа с внутренней связью в качестве параметра шаблона. (См. Пример ниже.) В стандарте С++ 11 нет. g++ - с использованием старого стандарта - позволяет это. Я неправильно читаю стандарт 03 или g++ просто разрешаю этот слайд?
namespace
{
struct hidden { };
}
template<typename T>
struct S
{
T t;
};
int main()
{
S<hidden> s;
return 0;
}