Должен ли 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 соглашается .

Другие вопросы по тегам