Должен ли std:: apply применяться только к std:: tuple?
Сигнатура функции не ограничивает параметр шаблона
Tuple
быть специализацией, поэтому он все еще может принимать объекты , подобные кортежу, которые определяют
std::tuple_size_v
(Godbolt ):
#include <tuple>
#include <utility>
#include <array>
int main() {
std::apply([](auto...) {}, std::array{0, 0});
std::apply([](auto...) {}, std::pair {0, 0});
std::apply([](auto...) {}, std::tuple{0, 0});
}
Но описание in [tuple.apply] таково :
20.5.5 Вызов функции с
tuple
аргументов
Означает ли это, что применение
std::apply
к объектам, кроме
std::tuple
такое неопределенное поведение?
1 ответ
Решение
20.5.5 Вызов функции с
tuple
аргументов
Я очень сомневаюсь, что названия разделов нормативны.
Фактическая функция описывается как эквивалентная эталонной реализации , в которой используется
get
а также
tuple_size_v
для проверки параметра "кортеж".
Cppreference соглашается .