Я беру адреса следующих экземпляров шаблонов переменных из двух блоков перевода:
template<class T> bool b = true;
template<class T> const bool cb = true;
template<class T> inline const bool icb = true;
Я печатаю адреса b<int>
, cb<int>
и icb<int>
. Вот что говорит clang :
0x6030c0 0x401ae4 0x401ae5 // first translation unit
0x6030c0 0x401ae4 0x401ae5 // second translation unit
Все адреса совпадают, что-то ожидаемое. И вот что gcc говорит :
0x6015b0 0x400ef5 0x400ef4 // first translation unit
0x6015b0 0x400ef6 0x400ef4 // second translation unit
Адрес cb<int>
изменяется. А? Это ошибка? Если нет, то может кто-нибудь объяснить мне этот эффект?