Что делает ключевое слово «шаблон» перед ключевым словом «класс»?

Просто пример кода [Не из реальной жизни]

// at file scope

template <typename T, typename U>
struct demo{};  
template class demo<int, int>; // is the template keyword optional here?

Ключевое слово шаблона в строке 3 необязательно? Я не видел (часто) такого использования ключевого слова шаблона раньше. В какой части стандарта это разрешено?

EDIT

Я думаю, что в g ++ есть ошибка.

template <typename T, typename U>
struct demo{};  
class demo<int, int>; // template keyword omitted

компилируется на g ++ (4.5.1), тогда как не работает на Comeau

"ComeauTest.c", line 5: error: specializing class "demo<int, int>" without
          "template<>" syntax is nonstandard
      class demo<int, int>; 
7
задан Prasoon Saurav 24 April 2011 в 07:12
поделиться