Код
template< Config param >
static void SetConfig( )
{
ClassTemp1::Set( param );
}
Тут вы пытаетесь передать в ClassTemp1::Set
тип в качестве параметра. А надо выражение (объект например).
Например так -
Код
template< Config param >
static void SetConfig( )
{
ClassTemp1::Set( param() );
}
Пардон, отбой.
Config у вас enum внутри класса. Сейчас попробую это g++ скормить ...
Вот ругань g++:
Цитата
err.cpp: In static member function static void C<Port>::Init():
err.cpp:45:39: error: expected primary-expression before ) token
err.cpp: In static member function static void C<Port>::Init() [with Port = B<A, 14u>]:
err.cpp:57:10: instantiated from here
err.cpp:45:7: error: no match for operator< in B::SetConfig [with B<ClassTemp1, number>::Config param = param, ClassTemp1 = A, unsigned char number = 14u] < B<A, 14u>::Fisrt
Судя по сообщению компилятор понял, что в
Port::SetConfig< Port::Fisrt >( ); у вас стоит не специализация шаблона, а
Port::SetConfig< Port::Fisrt с последующей синтаксической ошибкой на хвост выражения.
Похоже это не лечится.
А можно вопрос - нафига это надо? Чем нормальный параметр не устраивает?