Почему g ++ все еще требует -latomic

В29.5 Атомные типы рабочего проекта стандарта C ++ от ноября 2014 г.

Существует универсальный шаблон класса atomic. Тип аргумента шаблона T должен быть тривиально копируемым (3.9). [Примечание: аргументы типа, которые также не являются статически инициализируемыми, могут быть сложны в использовании. —Конечная записка]

Итак, насколько я могу судить, это:

#include <atomic>

struct Message {
    unsigned long int a;
    unsigned long int b;
};

std::atomic<Message> sharedState;

int main() {    
    Message tmp{1,2};       
    sharedState.store(tmp);         
    Message tmp2=sharedState.load();
}

должен быть совершенно корректный стандартный код c ++ 14 (а также c ++ 11). Однако, если я не буду ссылатьсяlibatomic вручную, команда

g++ -std=c++14 <filename>

дает - по крайней мере на Fedora 22 (gcc 5.1) - следующую ошибку компоновки:

/tmp/ccdiWWQi.o: In function `std::atomic<Message>::store(Message, std::memory_order)':
main.cpp:(.text._ZNSt6atomicI7MessageE5storeES0_St12memory_order[_ZNSt6atomicI7MessageE5storeES0_St12memory_order]+0x3f): undefined reference to `__atomic_store_16'
/tmp/ccdiWWQi.o: In function `std::atomic<Message>::load(std::memory_order) const':
main.cpp:(.text._ZNKSt6atomicI7MessageE4loadESt12memory_order[_ZNKSt6atomicI7MessageE4loadESt12memory_order]+0x1c): undefined reference to `__atomic_load_16'
collect2: error: ld returned 1 exit status

Если я напишу

g++ -std=c++14 -latomic <filename>

Все отлично. Я знаю, что стандарт ничего не говорит о флагах компилятора или библиотеках, которые должны быть включены, но до сих пор я думал, что любой стандартный, совместимый код одного файла можно скомпилировать с помощью первой команды.

Так почему же это не относится к моему примеру кода? Есть ли рациональная причина?-latomic все еще необходимо, или это просто что-то, что еще не было решено разработчиками компилятора?

Ответы на вопрос(3)

Ваш ответ на вопрос