Существует ли существующая (в стандартной библиотеке или в Boost) черта типа для проверки, может ли тип представлять строку?
Я столкнулся с проблемой при использовании Boost.Fusion:
auto number = fusion::make_vector( 1, "one" );
auto numberName = fusion::filter< char const * >( number );
assert( numberName == fusion::make_vector( "one" ) ); // fails
Я надеялся, что filter
сохранит "один", но это не удалось, потому что "один" не распался на указатель (make_vector
принимает свои аргументы по ссылке, поэтому тип равен const char (&)[4]
).Следовательно, мне нужна особенность, которая позволила бы мне написать что-то вроде этого:
auto numberName = fusion::filter_if< is_string< mpl::_ > >( number );
Я знаю, что char const *
и const char[N]
не обязательно являются строками с нулевым символом в конце, но это все равнобыть в состоянии обнаружить их равномерно.Эта черта также может вернуть true
для std::string
и лайков.
Существует ли такая черта или мне придется написать свою собственную?