Можно ли передать заключенный в скобки инициализатор в качестве параметра макроса?

У меня есть функция, которую я называю так:

literal<long[2]>({1, 2});

Я хочу написать макрос, который расширяется до этого утверждения, например:

MYMACRO(long[2], {1, 2})

К сожалению, препроцессор не знает о сопоставлении скобок, поэтому он видит три аргумента (второй и третий{1 а также2}соответственно).

Это известное ограничение препроцессора, и наиболее простым решением часто является добавление дополнительных скобок, если возможно, при вызове макроса.

Но в этом случае размещение заключенного в скобки инициализатора в скобках, по-видимому, меняет его значение:

literal<long[2]>(({1, 2}));

(g++ 4.8) error: left operand of comma operator has no effect [-Werror=unused-value]

Это ошибка GCC или исправлена по замыслу? Есть ли способ выполнить то, что я хочу?

Обновить

Я, вероятно, должен был быть более ясным в формулировке оригинальных вопросов. Препроцессор не изменился навсегда (даже вариационные макросы долгое время были расширением GCC). Практические обходные пути в этом случае полезны, но они также очень хорошо известны и не до такой степени, до которой я хочу добраться.

Я действительно хочу знать, было ли что-то добавлено в C ++ 11 для конкретного решения этой проблемы (или это было упущением?). Причудливая обработка скобок в вызовах макросов сейчас кажется гораздо более серьезной проблемой, учитывая значительно расширенное использование заключенных в скобки списков по всему языку.

Меня особенно раздражает тот факт, что размещение скобок вокруг заключенного в скобки списка инициализатора изменяет способ его анализа при использовании в качестве параметра функции. Есть ли какой-либо другой параметр для вызова функции, который нельзя заключить в скобки? Это похоже на адский случай при написании макросов, которые передают параметры в функции.

Я действительно надеюсь, что кто-то может указать, что это ошибка GCC, или объяснить, почему заключать скобки в квадратный список инициализаторовдолжен изменить его значение.

Ответы на вопрос(1)

Ваш ответ на вопрос