获取 `boost::filesystem::path` 字符指针的问题

Issue getting `boost::filesystem::path` character pointer

在以下两行中,第一行给我一个编译时错误,第二行没问题:

    std::remove( boost::filesystem::path( mypath / "file.log" ).c_str() );
    std::remove( boost::filesystem::path( mypath / "file.log" ).string().c_str() );

std::remove签名是:int remove( const char* fname );

这是错误信息:

"No instance of overloaded function "std::remove" matches the argument list"

但是 boost::filesystem::path::c_str()std::string::c_str() return 一个 const char*.

我使用的编译器是Visual C++ 2013。

But both boost::filesystem::path::c_str() and std::string::c_str() return a const char*

不,这不是真的。

我们可以打开 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 returns 指向宽字符(2 个字节)的指针。