Я пытаюсь сделать что-то вроде этого, используя снимок 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...
в аргументах шаблона для специализации?