Вопросы по выводу типа вызываемого шаблона [дубликат]C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вопросы по выводу типа вызываемого шаблона [дубликат]

Сообщение Anonymous »

В следующем коде C++ (MSVC C++20) цель состоит в том, чтобы убедиться, что мои шаблоны могут правильно определить тип первого аргумента функции-члена.

Код: Выделить всё

#include 

template 
struct args_holder
{
using type = std::tuple;
};

template 
struct base_holder;

template 
struct base_holder
 : args_holder
{
};

template 
using first_arg_type = std::tuple_element_t;

struct test_struct
{
void test_function(int x)
{

}
};

int main()
{
static_assert(std::is_same_v);
}
Компилятор захлебывается этим кодом, говоря, что 'type': не является членом какого-либо прямого или косвенного базового класса 'base_holder', но если я добавлю & перед test_struct::test_function, все будет работать нормально.
Первый вопрос: что именно делает &? Согласно IntelliSense, с & или без него decltype оценивается как void(test_struct::*)(int x), а шаблон оценивается как тип int.< /p>
Второй вопрос: у меня возникли проблемы с пониманием процесса вывода из имени типа base_holder::type. Как специализация понимает выбор шаблона с двумя+ параметрами и отделение этих типов от одного заданного ему типа decltype?

Подробнее здесь: https://stackoverflow.com/questions/786 ... -questions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»