【发布时间】:2020-01-13 03:31:53
【问题描述】:
我已经在 question 中说明了对带有指定初始化程序的 CTAD 的困惑,但我对非常相似的代码 sn-p 有另一个困惑
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> );
}
似乎推导指南导致first 的类型被推导为float,即使我没有在指定的初始化程序中给出明确的.first。无论关键字如何(.second),演绎指南显然只关心初始化程序中的顺序。扣分指南应该聪明点还是应该有“指定扣分指南”?
【问题讨论】:
-
演绎指南确实有点糊弄水了
标签: c++ c++20 designated-initializer ctad