explicit specialization is not allowed...
От: Кодт Россия  
Дата: 05.09.05 13:48
Оценка:
Вот сейчас наткнулся:

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;
}

вот я и натравил Комо... который споткнулся ещё раньше.
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.