Страницы

Поиск по вопросам

четверг, 29 ноября 2018 г.

Специализация шаблона вложенной структуры внутри внешней

http://ideone.com/Mhpw1y - такой код работает как надо:
struct a { template struct b { typedef int t; }; };
template <> struct a::b <1> { typedef double t; };
int main() { a::b<0>::t x; a::b<1>::t y;
return 0; }
Но я хочу перенести специализацию b внутрь a. Как это сделать?
Следующие способы не работают:
http://ideone.com/3MdjdF
prog.cpp:8:12: error: explicit specialization in non-namespace scope 'struct a' template <> struct b <1> ^
struct a { template struct b { typedef int t; };
template <> struct b <1> { typedef double t; }; }; http://ideone.com/XBD2ga
prog.cpp:8:9: error: too few template-parameter-lists struct b <1> ^
struct a { template struct b { typedef int t; };
struct b <1> { typedef double t; }; };
PS: Связано с этим вопросом


Ответ

Согласно стандарту C++ (14.7.3 Explicit specialization)
2 An explicit specialization shall be declared in a namespace enclosing the specialized template. An explicit specialization whose declarator-id is not qualified shall be declared in the nearest enclosing namespace of the template, or, if the namespace is inline (7.3.1), any namespace from its enclosing namespace set. Such a declaration may also be a definition. If the declaration is not a definition, the specialization may be defined later (7.3.1.2).

Комментариев нет:

Отправить комментарий