Разрешается ли sizeof ... в аргументах шаблона для специализации? - PullRequest
4 голосов
/ 16 ноября 2011

Я пытаюсь сделать что-то вроде этого, используя снимок GCC 4.7:

template <int n, int... xs>
struct foo { 
  static const int value = 0;
};

// partial specialization where n is number of ints in xs:

template <int... xs>
struct foo<sizeof...(xs), xs...> { // error: template argument ‘sizeof (xs ...)’
                                   //  involves template parameter(s)
  static const int value = 1;
};

template <int... xs>
struct foo<sizeof(xs), xs...> { // This compiles fine. sizeof(xs) is sizeof int 
                                // even though packs aren't expanded
  static const int value = 2;
};

Ошибка странная, потому что sizeof вместо sizeof ... работает в этом случае. Кажется, что оба они могут быть легко вычислены во время компиляции.

Верен ли компилятор, что я не могу использовать sizeof... в аргументах шаблона для специализации?

1 Ответ

3 голосов
/ 16 ноября 2011

Я собираюсь предположить, что это проблема компилятора после прочтения этого поста .

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

Что оспаривается здесь .

GCC либо неправильно распаковывает пакет параметров, либо выполняет оценкуsizeof преждевременно.

Ответ на сообщение об ошибке, которое я подал, может быть полезным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...