Может ли экспортированный шаблон функции вызывать локальную функцию модуля с помощью ADL?C++

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

Сообщение Anonymous »

Предположим, у нас есть простой файл main.cpp, который содержит только один вызов функциональной панели, которая определена в модуле a:

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

import a;

int main() {
bar(1);
}
Тогда давайте взглянем на модуль a:

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

export module a;

namespace N {

struct adl_tag {};

void foo(adl_tag, auto) {}

} // namespace N

export void bar(auto v) {
return foo(N::adl_tag{}, v);
}
Там у нас есть панель шаблона экспортированной функции, которая вызывает N::foo с использованием поиска, зависящего от аргументов. Однако функция foo не экспортируется и не видна из внешнего кода.
Ссылка Godbolt: https://godbolt.org/z/6Waqbj6zh
clang 21 прекрасно компилирует этот проект, но gcc 15 завершается с ошибкой:

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

In instantiation of ‘void bar@a(auto:2) [with auto:2 = int]’:
error: ‘foo’ was not declared in this scope
Какой здесь компилятор?


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

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

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

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

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

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