【问题标题】:Extracts the element of a tuple by type and ambiguity按类型和歧义提取元组的元素
【发布时间】:2015-10-26 09:43:09
【问题描述】:

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++ 错误还是符合标准?

【问题讨论】:

  • 我们有一些与你的旗帜有关的东西。擦除所有内容并简单地编写一个具有相同标志的“Hello world”应用程序,控制台什么也没有显示
  • @DavidHaim > 控制台什么也没显示。这是一个很好的结果。编译过程中缺少错误是案例中的好信息。
  • @DavidHaim 我稍微修改了示例以打印退出状态(零表示成功)。

标签: c++ clang tuples libc++ iterable-unpacking


【解决方案1】:

根据标准 §20.4.2.6/8,要求是:

要求:类型 T 在 Types.... 中只出现一次。否则,程序是非良构的。

所以你的程序格式不正确。

该标准甚至提供了一个与您的情况非常相似的示例:

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 编译。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-16
    • 2019-08-26
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多