康桓瑋*_*康桓瑋 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是未定义的行为?