Шаблон Variadic не распознает функцию constexpr

Я пытаюсь инициализировать некоторый массив C ++ во время компиляции, но я получил странную ошибку g ++. Вот самый маленький фрагмент кода, который мне удалось получить, который воспроизводит ошибку:

#include <array>

template<typename Ar, int... Vals>
constexpr Ar Map(typename Ar::value_type /*int*/ fun(int))
{ return {{ fun(Vals)... }}; }

constexpr int add(int i) { return i + 1; }

constexpr auto b = Map<std::array<int, 2>, 1, 2>(add);

Компилятор жалуется

bug.cpp:8:53:   in constexpr expansion of ‘Map<std::array<int, 2ul>, {1, 2}>(add)’
bug.cpp:4:80: error: expression ‘add’ does not designate a constexpr function
constexpr Ar Map(typename Ar::value_type /*int*/ fun(int)) { return {{ fun(Vals)... }}; }

Это происходит как с g ++ 4.7.1, так и с 4.9.0 20130520 (экспериментально). Обратите внимание, что
если я заменю typename Ar::value_type от int (см. комментарий) в определении
Mapвсе работает как положено. Это ошибка, я делаю что-то не так?

2

Решение

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]