diff --git a/include/ghc/filesystem.hpp b/include/ghc/filesystem.hpp index 7af17ab..a1badad 100644 --- a/include/ghc/filesystem.hpp +++ b/include/ghc/filesystem.hpp @@ -192,24 +192,38 @@ class GHC_FS_API_CLASS not_implemented_exception : public std::logic_error } }; -// 30.10.8 class path -class GHC_FS_API_CLASS path +template +class path_helper_base { public: + using value_type = char_type; #ifdef GHC_OS_WINDOWS -#ifdef GHC_WIN_WSTRING_STRING_TYPE -#define GHC_USE_WCHAR_T - using value_type = std::wstring::value_type; -#else - using value_type = std::string::value_type; -#endif - using string_type = std::basic_string; static constexpr value_type preferred_separator = '\\'; #else - using value_type = std::string::value_type; - using string_type = std::basic_string; static constexpr value_type preferred_separator = '/'; #endif +}; + +template +constexpr char_type path_helper_base::preferred_separator; + +// 30.10.8 class path +class GHC_FS_API_CLASS path +#if defined(GHC_OS_WINDOWS) && defined(GHC_WIN_WSTRING_STRING_TYPE) +#define GHC_USE_WCHAR_T + : private path_helper_base +{ +public: + using path_helper_base::value_type; +#else + : private path_helper_base +{ +public: + using path_helper_base::value_type; +#endif + using string_type = std::basic_string; + using path_helper_base::preferred_separator; + // 30.10.10.1 enumeration format /// The path format in wich the constructor argument is given. enum format { diff --git a/test/filesystem_test.cpp b/test/filesystem_test.cpp index 7e0570c..939dce8 100644 --- a/test/filesystem_test.cpp +++ b/test/filesystem_test.cpp @@ -345,6 +345,15 @@ TEST_CASE("fs::detail::toUtf8", "[filesystem][fs.detail.utf8]") } #endif +TEST_CASE("30.10.8.1 path::preferred_separator", "[filesystem][path][fs.path.generic]") +{ +#ifdef GHC_OS_WINDOWS + CHECK(fs::path::preferred_separator == '\\'); +#else + CHECK(fs::path::preferred_separator == '/'); +#endif +} + #ifndef GHC_OS_WINDOWS TEST_CASE("30.10.8.1 path(\"//host\").has_root_name()", "[filesystem][path][fs.path.generic]") {