Estoy tratando de compilar la siguiente pieza de código, me sale un error en la línea que se especializa en std :: vector, parece que se está asumiendo de alguna manera el parámetro que se pasa ser dos parámetros ¿Es acaso algo relacionado con los corchetes angulares?Problema con los parámetros de la plantilla utilizados en las macros
¿Hay alguna manera/mecanismo especial en el que dichos parámetros se puedan pasar correctamente a la macro?
#include <vector>
template<typename A>
struct AClass {};
#define specialize_AClass(X)\
template<> struct AClass<X> { X a; };
specialize_AClass(int) //ok
specialize_AClass(std::vector<int,std::allocator<int> >) //error
int main()
{
return 0;
}
El error que consigo es el siguiente:
1 Line 55: error: macro "specialize_AClass" passed 2 arguments, but takes just 1
2 Line 15: error: expected constructor, destructor, or type conversion before 'int'
3 compilation terminated due to -Wfatal-errors.
Enlace: http://codepad.org/qIiKsw4l
Tenga en cuenta que las macros variadic no son en realidad parte de el lenguaje C++ anterior a C++ 0x. –
Es cierto, pero son parte del estándar C99, y la mayoría de los compiladores los admiten cuando compilan fuera de cualquier modo pedante. –