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

Should std::apply only apply to std::tuple?

std::apply的函数签名没有将模板参数Tuple限制为std::tuple的特化,所以它仍然可以接受一个类元组定义 std::tuple_size_v (godbolt) 的对象:

#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 Calling a function with a tuple of arguments

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

20.5.5 Calling a function with a tuple of arguments

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

实际函数描述为 being equivalent to the reference implementation,它使用 gettuple_size_v 检查“元组”参数。

Cppreference concurs.