hiv*_*ert 2 c++ type-safety variadic-templates constexpr c++11
我正在尝试在编译时初始化一些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);
Run Code Online (Sandbox Code Playgroud)
编译器在抱怨
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)... }}; }
Run Code Online (Sandbox Code Playgroud)
这与g ++ 4.7.1和4.9.0 20130520(实验)一起发生.需要注意的是,如果我取代typename Ar::value_type
通过int
(见注释)中的定义
Map
,一切正常.这是我做错了什么的错误吗?
归档时间: |
|
查看次数: |
349 次 |
最近记录: |