Как заставить 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

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