Вот сейчас наткнулся:
Comeau 4.3.3 говорит, что
struct weave
{
template<bool v>
struct pass
{
static void go() {}
};
template< >
//"ComeauTest.c", line 9: error: explicit specialization is not allowed in the
// current scope
/ template< >
// ^
struct pass<true>
{
static void go() {}
};
static void go()
{
pass<0>::go();
pass<1>::go();
pass<N>::go();
}
};
int main()
{
weave::go();
return 0;
}
В то время как VC6 спокойно съедает. Кто из них прав?
P.S.
Код возник при рассмотрении вопроса о
метациклах.
Тут уже VC6 стал бухтеть
template<int N>
struct weave
{
template<int X>
struct pass
{
static void go() {}
};
template< >
struct pass<0>
{
static void go() {}
};
template< >
struct pass<N>
//t.cpp(11) : error C2011: 'pass<`template-parameter513'>' : 'struct' type redefinition
// t.cpp(21) : see reference to class template instantiation 'weave<N>' being compiled
{
static void go() {}
};
static void go()
{
pass<true>::go();
pass<false>::go();
}
};
int main()
{
weave::go();
return 0;
}
вот я и натравил Комо... который споткнулся ещё раньше.