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
相关产品推荐
相关产品推荐

