Повторяющиеся символы с реализацией только заголовка

У меня есть класс C ++, который объявлен и реализован в заголовочном файле. Я выбрал это, потому что нельзя легко перемещаться между сборками Debug и Release из-за_GLIBCXX_DEBUG и предварительно скомпилированные библиотеки. Например, если я определю_GLIBCXX_DEBUG, Boost завершится сбоем из-за изменений ABI в исходных файлах.

Реализация только заголовка создала проблему с дублирующимися символами. Например, в классе нижеoperator== и не членswap будет производить несколько определенных символов.

// Foo.hpp
namespace Bar
{
  template
  class Foo
  {
    ...
  };

  bool operator==(const Foo& a, const Foo& b) {
    ..
  }
}

namespace std
{
  template 
  void swap(Bar::Foo& a, Bar::Foo& b)
  {
    a.swap(b);
  }
}

Когда объявление и реализация были разделены, файлы (Foo.hpp и Foo.cpp) скомпилированы и соединились.

Какой трюк, чтобы заставить это правильно скомпилировать и связать?

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

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