Все здравствуйте.
Вот такой код:
#define TYPEDEF_AS_BASE( t ) typedef t Base;
template<class T1, class T2>
class Some
{
};
TYPEDEF_AS_BASE(Some< int, char >)
void main()
{
}
Не компилится. Сначала идёт объясняющее всё предупреждение:
warning C4002: too many actual parameters for macro 'TYPEDEF_AS_BASE'
А потом ещё несколько ошибок.
Очевидно, препроцессор неправильно истолковвывает запятую в
TYPEDEF_AS_BASE(Some< int, char >)
Проблема в том, что как-то иначе он её толковать не может — компилятор ещё даже не запустился. Скобки помогают успокоить перпроцессор, но, так как выражение
typedef (Some<int, char>) Base;
Отвергается компилятором, не спасают ситуацию в целом.
Подскажите, как с этим бороться. Запускаю на VC 6 и 2003