Как создать массив во время компиляции?

0
template<std::size_t sz>
constexpr std::array<int,sz> range(){
  std::array<int,sz> arr{0};
  std::iota(arr.begin(),arr.end(),0);
  return arr;
}

Если я попытаюсь назвать это как

auto r = range<10>()

Я получу следующую ошибку

> $ clang++ -stdlib=libc++ -std=c++1y main.cpp -o main && ./main                                                                                  
main.cpp:33:30: error: implicit instantiation of undefined template 'std::__1::array<int, 10>'
constexpr std::array<int,sz> range(){
                             ^
main.cpp:48:12: note: in instantiation of function template specialization 'range<10>' requested here
  auto r = range<10>();
           ^
/usr/include/c++/v1/__tuple:69:65: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS_ONLY array;
                                                                ^
main.cpp:34:22: error: implicit instantiation of undefined template 'std::__1::array<int, 10>'
  std::array<int,sz> arr{0};
                     ^
/usr/include/c++/v1/__tuple:69:65: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS_ONLY array;
                                                                ^
main.cpp:48:12: error: implicit instantiation of undefined template 'std::__1::array<int, 10>'
  auto r = range<10>();
           ^
/usr/include/c++/v1/__tuple:69:65: note: template is declared here
template <class _Tp, size_t _Size> struct _LIBCPP_TYPE_VIS_ONLY array;
                                                                ^
3 errors generated.

Какая у меня ошибка?

  • 4
    Кажется, вы не #include <array> .
  • 1
    Обратите внимание, что ваша функция не применяется для выполнения во время компиляции в C ++ 11.
Показать ещё 4 комментария
Теги:
c++11
c++14

1 ответ

4
Лучший ответ

Обязательно включите

#include <array>
#include <numeric>

http://coliru.stacked-crooked.com/a/fc15a6715178a49b

  • 0
    О, мальчик, это было неловко, спасибо.
  • 0
    @MaikKlein Нет проблем, отметьте это как принятый ответ, если это решило вашу проблему, пожалуйста

Ещё вопросы

Сообщество Overcoder
Наверх
Меню