std::array从生成器函数编写一个简单的编译时工厂,我偶然发现:clang ++ 3.5.1和g ++ 4.9.2不同意函数是否constexpr存在.
代码(这是c ++ 14!):
#include <array>
#include <utility>
template <class T, std::size_t N, class GenType, std::size_t... I>
constexpr std::array<T, N>
make_array_impl (GenType gen, std::index_sequence <I...>)
{
return {{ gen (I)... }};
}
template <class T, std::size_t N, class GenType>
constexpr std::array<T, N>
make_array (GenType gen)
{
return make_array_impl <T, N> (
gen,
std::make_index_sequence <N> {}
);
}
constexpr int
generator_const (std::size_t /* index */)
{
return 1;
}
constexpr auto
a = make_array …Run Code Online (Sandbox Code Playgroud)