Son legales los argumentos de macro vacíos en C ++ 11?

A veces omito deliberadamente los argumentos macro. Por ejemplo, para una macro con función como

#define MY_MACRO(A, B, C)  ...

Podría llamarlo como:

MY_MACRO(, bar, baz)

Todavía hay técnicamente 3 argumentos; es solo que el primero está "vacío". Esta pregunta no se trata de macros variadic.

Cuando hago esto, recibo advertencias de g ++ al compilar con-ansi (también conocido como-std=c++98), pero no cuando uso-std=c++0x. ¿Significa esto que los macroargs vacíos son legales en el nuevo estándar C ++?

Esa es la totalidad de mi pregunta, pero anticipándome al "¿por qué quieres hacerlo?" respuesta, aquí hay un ejemplo. Me gusta mantener los archivos .h despejados por los cuerpos de funciones, pero implementar accesores simples fuera del archivo .h es tedioso. Por lo tanto, escribí la siguiente macro:

#define IMPLEMENT_ACCESSORS(TEMPLATE_DECL, RETURN_TYPE, CLASS, FUNCTION, MEMBER) \
  TEMPLATE_DECL                                                         \
  inline RETURN_TYPE* CLASS::Mutable##FUNCTION() {                      \
    return &MEMBER;                                                     \
  }                                                                     \
                                                                        \
  TEMPLATE_DECL                                                         \
  inline const RETURN_TYPE& CLASS::FUNCTION() const {                   \
    return MEMBER;                                                      \
  }

Así es como lo usaría para una plantilla de clase que contiene unint llamadoint_:

IMPLEMENT_ACCESSORS(template<typename T>, int, MyTemplate<T>, Int, int_)

Para una clase sin plantilla, no necesitotemplate<typename T>, así que omito ese argumento macro:

IMPLEMENT_ACCESORS(, int, MyClass, Int, int_)

Respuestas a la pregunta(3)

Su respuesta a la pregunta