Por que o g ++ ainda requer -latomic

No29.5 Tipos atômicos da minuta de trabalho do C ++ Standard de novembro de 2014, declara:

Existe um modelo de classe genérico atômico. O tipo do argumento do modelo T deve ser trivialmente copiável (3.9). [Nota: argumentos de tipo que também não são estaticamente inicializáveis podem ser difíceis de usar. - end note]

Então - até onde eu sei - isto:

#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();
}

deve ser um código padrão c ++ 14 perfeitamente válido (e também c ++ 11). No entanto, se eu não vincularlibatomic manualmente, o comando

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

dá - pelo menos no Fedora 22 (gcc 5.1) - o seguinte erro de vinculação:

/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

Se eu escrever

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

tudo está bem. Eu sei que o padrão não diz nada sobre sinalizadores ou bibliotecas do compilador que precisam ser incluídos, mas até agora pensei que qualquer código de arquivo único compatível com o padrão possa ser compilado através do primeiro comando.

Então, por que isso não se aplica ao meu código de exemplo? Existe um motivo racional-latomic ainda é necessário ou ainda é algo que ainda não foi tratado pelos mantenedores do compilador?

questionAnswers(3)

yourAnswerToTheQuestion