You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

g++ 5.3.0中std::common_type<double,...>::type为何未折叠?

为何std::common_type<double, double, ...>::type未发生类型折叠?

我编写了如下模板函数:

template<typename ...T>
inline ARRAY<typename std::common_type<T...>::type, sizeof...(T)> make_array_(const T&..._r)
{       return ARRAY<typename std::common_type<T...>::type, sizeof...(T)>(_r...);
}

该函数生成的符号为:

0000000000000361 t namespace::ARRAY_IMPL<std::common_type<double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double>::type, sizeof (double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double), std::is_trivial<std::common_type<double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double>::type>::value> namespace::make_array_<double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double>(double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&, double const&)

使用g++ 5.3.0编译时,为什么std::common_type<double, double, double>::type没有发生类型折叠?完整代码如下:

#include <type_traits>
template<typename T, std::size_t SIZE>
struct ARRAY
{       template<typename ...T1>
        ARRAY(T1&&...)
        {
        }
};
template<typename ...T>
inline ARRAY<typename std::common_type<T...>::type, sizeof...(T)> make_array_(const T&..._r)
{       return ARRAY<typename std::common_type<T...>::type, sizeof...(T)>(_r...);
}


const auto sA = make_array_(1.0, 2.0, 3.0);

int main(int, char**)
{
}

内容的提问来源于stack exchange,提问作者Frank Puck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 10:35:24