Как работает ODR с лямбдами в Global ScopeC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как работает ODR с лямбдами в Global Scope

Сообщение Anonymous »

У меня есть следующий код -< /p>

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

template 
struct unique {};

template 
struct ltype {
using type = decltype(F);
};

using p = unique;
using q = unique;

void foo(p x);
void foo(q x);
< /code>
Я использую экземпляр Lambda для создания неназванного типа. Я хочу понять, как работают связи для foo 
, и если объявление появится в файле заголовка, нарушит ли это правило единого определения? Вывод из NM (если два объявления определены) -< /p>

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

000000000000000b t _Z3foo6uniqueIiKUlvE0_E
0000000000000000 t _Z3foo6uniqueIiKUlvE_E
Значит ли это, если заголовок включен в другой порядок в разных единицах перевода, Foo получит другое имя, а линкер будет жаловаться? /> [ поднят из комментариев OP < /em>] < /p>
Мой вопрос о том случае, когда этот код находится в заголовке и включен в два блока перевода. Я также имел в виду случай, когда один из блок перевода определяет эти функции, а другой вызывает их. Поскольку типы уникальны для блока перевода, соответствует ли определение [не] вызов?

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

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

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

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

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

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