相关疑难解决方法(0)

C ++ 20中的CTAD和指定的初始值设定项

我已经在这个问题中对使用指定的初始化程序的CTAD感到困惑,但是我对另一个非常相似的代码段也感到困惑

template <typename int_t=int, typename float_t=float>
struct my_pair {
    int_t   first;
    float_t second;
};

template<typename ... ts>
my_pair(ts...) -> my_pair<ts...>;

int main() {
    my_pair x{.second = 20.f};
    static_assert( std::is_same_v<decltype(x.first), int> ); //FAILS <- its deduced to float
    static_assert( std::is_same_v<decltype(x.second), float> );
}
Run Code Online (Sandbox Code Playgroud)

即使我没有在指定的初始值设定项中给出显式信息,推论指南似乎也将推导类型first推导为。无论关键字(),推论指南显然只关心初始化程序中的顺序。演绎指南应该明智吗?还是应该有一个“指定演绎指南”?float.first.second

请参阅https://godbolt.org/z/cm6Yi7上的示例

c++ designated-initializer c++20 ctad

7
推荐指数
1
解决办法
136
查看次数

标签 统计

c++ ×1

c++20 ×1

ctad ×1

designated-initializer ×1