и сделал такую демку https://wandbox.org/permlink/pSDgWCv4AO71wcpc Тут в module interface unit common.cpp объявлено две константы: export constexpr int ec = 18; и const std::string str = "abc";. С ес всё понятно, она экспортится, у неё external linkage. А вот с str не очень. Я её использую в других единицах трансляции этого модуля - в impl1 и impl2. Т.е. у неё явно module linkage. НО. Из стандарта вроде бы следует, что должен быть internal: http://eel.is/c++draft/basic.link#3 потому что она "a non-template variable of non-volatile const-qualified type". В следующем абзаце идут ещё правила, но только для "name having namespace scope that has not been given internal linkage above". А мы для неё уже получили internal linkage above. Собственно вопрос. Это просто кланг пока работает не по стандарту, или это я не умею его читать?
Как я вижу в Clang-е сейчас беда: internal linkage переменные манглятся именем модуля (как module linkage) вместо имени .cpp https://wandbox.org/permlink/7NEok0iJupUycGea
Обсуждают сегодня