Добавить std::variant_index по аналогии с std::variant_alternative

Олег Фатхиев
Олег Фатхиев

Предлагается добавить функцию std::variant_index/std::variant_index_v

Она могла бы выглядеть как-то так:

template <class T, class V>
struct variant_index;

template <class T, class... Ts>
struct variant_index<T, std::variant<Ts...>>
    : integral_contant<size_t, index_of<T, Ts..>::value>;

template <class T, class V>
constexpr size_t variant_index_v = variant_index<T, V>::value;

Где index_of - некая метафункция, возвращающая индекс типа T в списке типов std::variant.

Нужно также определить поведение этой функции:

Если T не содержится в Ts... (или T содержится в Ts... больше 1 раза), то поведение не определено.

Включать ли пункт про наличие T в Ts... больше одного раза - непонятно, это нужно обсудить.

4
рейтинг
2 комментария
yndx-antoshkka

Отличная идея. Для симметрии, стоит добавить аналогичный функционал для std::tuple

yndx-antoshkka
Обновлено 
Andrey Davydov

А Вы можете показать пример использования variant_index? Я совершенно не против Вашей идеи, просто хотелось бы увидеть пару конкретных примеров.

Andrey Davydov
Обновлено 
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения