Но оба boost :: filesystem :: path :: c_str () и std :: string :: c_str ()
вернуть константный символ *
нет, это не так.
Мы можем открыть boost\filesystem\path.hpp
исходный код и посмотреть, что там происходит:
template< typename Char, Char Separator, Char PreferredSeparator, Char Dot >
struct path_constants
{
typedef path_constants< Char, Separator, PreferredSeparator, Dot > path_constants_base;
typedef Char value_type; // <---
//...
};
class path :
public filesystem::path_detail::path_constants<
#ifdef BOOST_WINDOWS_API
wchar_t, L'/', L'\\', L'.' // [1]
#else
char, '/', '/', '.'
#endif
>
{
и в [1] строка wchar_t
передается в качестве первого аргумента Char
в шаблон path_constants
, поэтому в Windows c_str
возвращает указатель на широкий символ (2 байта).