From 5e09cf1aef8042c482727edba8f5f16d940fb878 Mon Sep 17 00:00:00 2001 From: Jinhao Date: Wed, 17 Feb 2016 00:32:15 +0800 Subject: [PATCH] add a check for support of C++11 inline namespace --- include/nana/c++defines.hpp | 4 +++- include/nana/filesystem/filesystem.hpp | 10 ++++++++-- source/filesystem/filesystem.cpp | 5 +++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/include/nana/c++defines.hpp b/include/nana/c++defines.hpp index 7f1f8898..d23e0a48 100644 --- a/include/nana/c++defines.hpp +++ b/include/nana/c++defines.hpp @@ -39,13 +39,15 @@ #ifndef NANA_CXX_DEFINES_INCLUDED #define NANA_CXX_DEFINES_INCLUDED #define STD_FILESYSTEM_NOT_SUPPORTED + //C++ language #if defined(_MSC_VER) # undef STD_FILESYSTEM_NOT_SUPPORTED # if (_MSC_VER < 1900) # //Nana defines some macros for lack of support of keywords # define _ALLOW_KEYWORD_MACROS -# +# +# define CXX_NO_INLINE_NAMESPACE //no support of C++11 inline namespace until Visual C++ 2015 # define noexcept //no support of noexcept until Visual C++ 2015 # define constexpr //no support of constexpr until Visual C++ 2015 # endif diff --git a/include/nana/filesystem/filesystem.hpp b/include/nana/filesystem/filesystem.hpp index 5a308e9c..a3a3e373 100644 --- a/include/nana/filesystem/filesystem.hpp +++ b/include/nana/filesystem/filesystem.hpp @@ -42,8 +42,13 @@ // namespace std { namespace experimental { namespace filesystem { inline namespace v1 { -namespace nana { namespace experimental { inline namespace v1 +namespace nana { namespace experimental { + +#ifndef CXX_NO_INLINE_NAMESPACE +inline namespace v1 { +#endif + namespace filesystem { enum class file_type @@ -367,8 +372,9 @@ namespace filesystem return index ? path.substr(0, index + 1) : std::basic_string(); } - +#ifndef CXX_NO_INLINE_NAMESPACE } //end namespace v1 +#endif } //end namespace filesystem } //end namespace experimental diff --git a/source/filesystem/filesystem.cpp b/source/filesystem/filesystem.cpp index 42691b6a..aca26162 100644 --- a/source/filesystem/filesystem.cpp +++ b/source/filesystem/filesystem.cpp @@ -38,7 +38,9 @@ namespace nana { namespace experimental { +#ifndef CXX_NO_INLINE_NAMESPACE inline namespace v1 { +#endif namespace filesystem { //class filesystem_error @@ -870,7 +872,10 @@ namespace nana { namespace experimental { ::chdir(p.c_str()); #endif } + +#ifndef CXX_NO_INLINE_NAMESPACE } //end namespace v1 +#endif }//end namespace filesystem } //end namespace experimental }//end namespace nana