Ошибка: шаблон со связью C и специализация шаблона со связью C при включении ‹atomic›

Предыстория проблемы:

В ProjectA agent_multi_threading.hpp включен в agent.h.
В ProjectB я пытаюсь включить agent.h в processing_core.h.

ProjectA написан на C, а ProjectB — на C++.

В приведенном ниже коде показана иерархия включения:

/* File: agent_multi_threading.hpp ProjectA */

#ifdef __cplusplus

 #include <atomic>
 using namespace std;

#else
/* File: agent.h in ProjectA */

#include "agent_multi_threading.hpp"
/* File: processing_core.h ProjectB */

extern "C" {
#include "agent.h"
}

Сообщение об ошибке:

In file included from /<compiler_path>/gnu/gcc/8.2.0/rhesys/include/c++/8.2.0/atomic:41,
            from /<dir_path>/ProjectB/src/agent_multi_threading.hpp:30,
            from /<dir_path>/ProjectB/src/agent.h:10,
            from /<dir_path>/ProjectA/src/processing_core.cpp:5:
/<compiler_path>/gnu/gcc/8.2.0/rhesys/include/c++/8.2.0/bits/atomic_base.h:109:3: error: template with C linkage
    template<typename _Tp>
    ^~~~~~~~

/<dir_path>/ProjectA/src/processing_core.cpp:5:1: note: 'extern "C"' linkage started here
  extern "C" {
  ^~~~~~~~~~
          from /<dir_path>/ProjectB/src/agent_multi_threading.hpp:30,
          from /<dir_path>/ProjectB/src/agent.h:10,
          from /<dir_path>/ProjectA/src/processing_core.cpp:5:
/<compiler_path>/gnu/gcc/8.2.0/rhesys/include/c++/8.2.0/atomic:62:3: error: template specialization with C linkage
    template<>
    ^~~~~~~~

Q1. Каковы значения шаблона со связью C и специализации шаблона со связью C?

Q2. Почему это происходит в моем коде?


person ZuckerReis    schedule 25.02.2020    source источник
comment
Отвечает ли это на ваш вопрос? Почему шаблоны не могут быть внутри внешних блоков C?   -  person ChrisMM    schedule 25.02.2020
comment
Большое спасибо за ответ. Эта ветка полностью ответила на мой вопрос. Я просмотрел заголовочный файл библиотеки ‹some_path›/gcc/‹more_path›/c++/8.2.0/bits/atomic_base.h и обнаружил, что это та же проблема, что и указанная вами ссылка. Несколько иерархий включения меня немного смущают при просмотре журнала компиляции.   -  person ZuckerReis    schedule 25.02.2020