3

的函数签名std::apply不将模板参数限制为Tuple的特化std::tuple,因此它仍然可以接受定义(godbolt的类似元组的对象:std::tuple_size_v

#include <tuple>
#include <utility>
#include <array>

int main() {
  std::apply([](int, int) {}, std::array{0, 0});
  std::apply([](int, int) {}, std::pair {0, 0});
  std::apply([](int, int) {}, std::tuple{0, 0});
}

但是[tuple.apply]std::apply中的描述是:

20.5.5 调用带有tuple参数的函数

这是否意味着应用于std::apply对象以外的对象std::tuple是未定义的行为?

4

1 回答 1

7

20.5.5 调用带有tuple参数的函数

我高度怀疑章节标题是否规范。

实际函数被描述为等效于参考实现,它使用gettuple_size_v检查“元组”参数。

Cppreference同意

于 2021-09-11T10:45:44.577 回答