The article声明免费std::get
功能过载(4-6项)
提取类型为T的元组t的元素。如果元组具有多个该类型的元素,则无法编译。
最后一个陈述是要求还是仅仅是一种可能性?
我问这个问题是因为std::get< int >(std::make_tuple(1, 2))
编译好clang++ -std=gnu++1z -stdlib=libc++
(live example)。这个元组的行为是 libc ++ 错误还是符合标准?
答案 0 :(得分:2)
根据标准§20.4.2.6/ 8,要求是:
要求:类型T在类型中恰好出现一次....否则,程序格式不正确。
所以你的程序结构不合理。
该标准甚至提供了一个与您的情况非常相似的示例:
const tuple<int, const int, double, double> t(1, 2, 3.4, 5.6);
const int &i1 = get<int>(t); // OK. Not ambiguous. i1 == 1
const int &i2 = get<const int>(t); // OK. Not ambiguous. i2 == 2
const double &d = get<double>(t); // ERROR. ill-formed
如果您plug in Clang编译。