Использование decltype для объявления функции приводит к «конфликту» при определении функции.C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Использование decltype для объявления функции приводит к «конфликту» при определении функции.

Сообщение Anonymous »

Я использую decltype, чтобы гарантировать, что функция шаблона Force2 имеет те же параметры и типы возвращаемых значений, что и другая функция шаблона Force1, но она не компилируется. Мне нужно, чтобы функции были шаблонными.
Рассмотрите этот код:

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

template 
void force1(N a);

template 
using ForceType = decltype(force1);

template 
ForceType force2;

template 
void force2(N a)
{}
Это приводит к ошибке:

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

:11:16: error: 'template void force2(N)' conflicts with a previous declaration
11 | void force2(N a)
|                ^
:8:14: note: previous declaration 'template ForceType force2'
8 | ForceType force2;
|              ^~~~~~
Compiler returned: 1
Я ожидал, что это скомпилируется: Force2 будет шаблонной функцией с пустым телом. Что здесь на самом деле происходит? Компилятор намекает, что template void Force2(N) — это не то же самое, что template ForceType Force2, который я не могу понять. На первый взгляд они определенно кажутся разными, но не должно ли расширение ForceType привести к template void Force2(N)?
Когда я использую конкретный тип в объявлении Force2:

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

template 
void force1(N a);

template 
using ForceType = decltype(force1);

ForceType force2;

void force2(int a)
{}
Компилируется без ошибок.


Подробнее здесь: https://stackoverflow.com/questions/781 ... fining-the
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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