powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск перегруженной шаблонной функции
2 сообщений из 2, страница 1 из 1
Поиск перегруженной шаблонной функции
    #39991565
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VS 2019. Вот сами функции:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <array>

template <size_t Pos, typename T, size_t Size>
typename void at(std::array<T, Size> &arr)
{}

template <auto Pos, typename T, size_t Size>
typename std::enable_if_t<std::is_enum_v<decltype(Pos)>, void>
    at(std::array<T, Size> &arr)
{}


А вот использование. Не компилируется.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
enum class E:
    uint
{
    A, B, C
};

void testArray()
{
    std::array<int, DimCount> arr = { 1, 2, 3 };
    at<1>(arr);
    at<E::B>(arr); // <=== ambiguous call to overloaded function.
}


А вот так уже компилируется.

Код: plaintext
1.
2.
3.
4.
5.
6.
void testArray()
{
    std::array<int, DimCount> arr = { 1, 2, 3 };
    //at<1>(arr);
    at<E::B>(arr); // Success! LOL.
}


Ну я так понимаю, что это глюк компилятора. Я его обошёл переписав первую функцию вот так:

Код: plaintext
1.
2.
3.
4.
template <auto Pos, typename T, size_t Size>
typename std::enable_if_t<std::is_integral_v<decltype(Pos)>, void>
    at(std::array<T, Size> &arr)
{}


Но может у кого есть идеи? Может я неправильно написал?

PS: Самое интересное, что если вернуться к первому варианту (непофиксенному мной) и закомментировать вторую функцию, то strong enum начинает приводится к size_t. Т.е. оно начинает вот так компилироваться при этом текстовый редактор показывает, что в коде ошибка.
...
Рейтинг: 0 / 0
Поиск перегруженной шаблонной функции
    #39991761
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Поиск перегруженной шаблонной функции
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]