test::a在初始化的时候用()和{}居然tuple里初始化顺序不一样。用()的时候居然是反过来的,这是为啥?被坑了一个通宵。
#include <iostream>
#include <tuple>
template<class T>
T init_value(int t)
{
if (std::is_same_v<T, int>)
{
std::cout << "int" << std::endl;
return 2;
}
else if (std::is_same_v<T, double>)
{
std::cout << "double" << std::endl;
return t + 0.5;
}
}
template<class...Ts>
struct test
{
// 用a()初始化,顺序是double->int
// 用a{}初始化,顺序是int->double
test(int i)
:a(init_value<Ts>(i)...)
{}
std::tuple<Ts...> a;
};
int main(int argc, char* argv[])
{
test<int, double> t(1);
std::cout << std::get<0>(t.a) << std::endl;
std::cout << std::get<1>(t.a) << std::endl;
}
--
FROM 115.193.169.*