std::apply 应该只适用于 std::tuple 吗?

康桓瑋*_*康桓瑋 3 c++ language-lawyer stdtuple c++17 stdapply

的函数签名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});
}
Run Code Online (Sandbox Code Playgroud)

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

tuple20.5.5 使用参数调用函数

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

Hol*_*Cat 7

tuple20.5.5 使用参数调用函数

我非常怀疑章节标题是否规范。

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

Cppreference同意