Как заставить ADL работать с перегруженными функциями в модулях C ++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как заставить ADL работать с перегруженными функциями в модулях C ++?

Сообщение Anonymous »

У меня есть модуль A Экспорт шаблона класса, который использует перегруженную функцию foo () в зависимости от аргумента типа шаблона:

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

module;
export module A;

export void foo(bool a) {}
export void foo(int a) {}

export template 
struct call {
void (*fn)(T) = foo;
};
Затем в Mobule B I Импорт модуль A и попытаться использовать класс с помощью пользовательского типа и пользовательской перегруженной функции foo () для этого типа:

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

module;
export module B;
import A;

void foo(float a) {}

call c = {};
< /code>
Но Clang не удается с ошибкой: < /p>
error: address of overloaded function 'foo' does not match required type 'void (float)'
< /code>
правильно понимаю, что модули разрешают ADL только тем, что на самом деле видит этот модуль, например, Модуль A 
может видеть только то, что он определяет себя и что он импортирует?>

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

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

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

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

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

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