Demangling и & lt; sstream & gt; приводит к «неоднозначной ссылке на пространство имен __gnu_gxx»

Когда мне нужно напечатать информацию о типе во время выполнения, я всегда применяю demangling к std::type_info::name() результат. Это реализация для GCC, которая использует abi::__cxa_demangle():

#include <cxxabi.h>

GCC demangling implementation
std::string demangle(  const std::string& name )
{
int status;

return std::string( abi::__cxa_demangle( name.c_str() , 0 , 0 , &status ) );

return name;
}

Сегодня я писал to_string Шаблон, который позволяет мне печатать содержимое списка типов. Чтобы избежать std::stringконкатенации, я использовал поток строк, std::ostringstream:

template<typename T>
struct to_string_t
{
operator std::string()
{
return demangle( typeid( T ).name() );
}
};

template<typename... Ts>
struct to_string_t<mpl::list<Ts...>>
{
operator std::string()
{
std::ostringstream os;

os << '[' << _to_string<mpl::list<Ts...>>() << ']';

return os.str();
}
};

_to_string шаблон класса, который реализует operator<<для рекурсивной печати содержимого списка типов в поток. (Я не включаю его, чтобы не переполнять пост не связанным кодом метапрограммирования).

Это работает отлично без разбора. Когда я включаю <cxxabi> чтобы реализовать деминглинг, компилятор показывает ambiguous reference to __gnu_gxx namespace ошибка в sstream.h,

Что может быть причиной?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]