小编min*_*lus的帖子

gcc和clang对constexpr功能不一致

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)

c++ gcc clang constexpr c++14

6
推荐指数
1
解决办法
656
查看次数

标签 统计

c++ ×1

c++14 ×1

clang ×1

constexpr ×1

gcc ×1