http://ideone.com/Mhpw1y - такой код работает как надо:
struct a
{
template
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
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 <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).
Комментариев нет:
Отправить комментарий