LOGCXX-528 (#66)

Fixes for checking that C++11 is available.  Fix for older compilers.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e5b44ef..9c6e639 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -41,6 +41,9 @@
     set(CMAKE_CXX_STANDARD 17)
 endif()
 
+# Don't allow for compiler-specific extensions
+set(CMAKE_CXX_EXTENSIONS OFF)
+
 # Building
 add_subdirectory(src)
 
@@ -186,6 +189,13 @@
 endif()
 
 #
+# Check for any fatal configuration errors
+#
+if( "${SHARED_MUTEX_IMPL}" STREQUAL "NONE" )
+    message( FATAL_ERROR "No shared_mutex implementation found.  Requires Boost or C++17" )
+endif()
+
+#
 # Output configuration information
 # Similar to APR CMake configuration
 #
diff --git a/src/cmake/boost-fallback/boost-fallback.cmake b/src/cmake/boost-fallback/boost-fallback.cmake
index a8d7d44..8285b0b 100644
--- a/src/cmake/boost-fallback/boost-fallback.cmake
+++ b/src/cmake/boost-fallback/boost-fallback.cmake
@@ -56,16 +56,17 @@
     "${CMAKE_CURRENT_LIST_DIR}/test-stdatomic.cpp")
 
 find_package(Boost COMPONENTS thread)
-try_compile(Boost_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
-    "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedptr.cpp")
-try_compile(Boost_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
-    "${CMAKE_CURRENT_LIST_DIR}/test-boostmutex.cpp")
-try_compile(Boost_SHARED_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
-    "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedmutex.cpp"
-    LINK_LIBRARIES Threads::Threads
-)
-try_compile(Boost_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
-    "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp")
+if( ${Boost_FOUND} )
+    try_compile(Boost_SHARED_PTR_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+        "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedptr.cpp")
+    try_compile(Boost_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+        "${CMAKE_CURRENT_LIST_DIR}/test-boostmutex.cpp")
+    try_compile(Boost_SHARED_MUTEX_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+        "${CMAKE_CURRENT_LIST_DIR}/test-boostsharedmutex.cpp"
+        LINK_LIBRARIES Threads::Threads Boost::thread)
+    try_compile(Boost_ATOMIC_FOUND "${CMAKE_BINARY_DIR}/boost-fallback-compile-tests"
+        "${CMAKE_CURRENT_LIST_DIR}/test-boostatomic.cpp")
+endif( ${Boost_FOUND} )
 
 # Link the target with the appropriate boost libraries(if required)
 function(boostfallback_link target)
diff --git a/src/main/cpp/hierarchy.cpp b/src/main/cpp/hierarchy.cpp
index 4f51744..c70d39d 100644
--- a/src/main/cpp/hierarchy.cpp
+++ b/src/main/cpp/hierarchy.cpp
@@ -223,7 +223,7 @@
 	else
 	{
 		LoggerPtr logger(factory->makeNewLoggerInstance(pool, name));
-		logger->setHierarchy(weak_from_this());
+		logger->setHierarchy(shared_from_this());
 		loggers->insert(LoggerMap::value_type(name, logger));
 
 		ProvisionNodeMap::iterator it2 = provisionNodes->find(name);
@@ -423,6 +423,6 @@
 	// LOGCXX-322 we need to turn the repositroy into a weak_ptr, and we
 	// can't use weak_from_this() in the constructor.
 	if( !root->getLoggerRepository().lock() ){
-		root->setHierarchy(weak_from_this());
+		root->setHierarchy(shared_from_this());
 	}
 }
diff --git a/src/main/include/CMakeLists.txt b/src/main/include/CMakeLists.txt
index 8183660..584941c 100644
--- a/src/main/include/CMakeLists.txt
+++ b/src/main/include/CMakeLists.txt
@@ -133,7 +133,7 @@
 elseif( ${Boost_SHARED_MUTEX_FOUND} )
     set( SHARED_MUTEX_IMPL "boost::shared_mutex" )
 else()
-    set( SMART_PTR_IMPL "NONE" )
+    set( SHARED_MUTEX_IMPL "NONE" )
 endif()
 
 if( ${STD_ATOMIC_FOUND} )
diff --git a/src/main/include/log4cxx/helpers/appenderattachableimpl.h b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
index 40e77d9..b80b5aa 100644
--- a/src/main/include/log4cxx/helpers/appenderattachableimpl.h
+++ b/src/main/include/log4cxx/helpers/appenderattachableimpl.h
@@ -28,6 +28,7 @@
 #include <log4cxx/helpers/object.h>
 #include <log4cxx/helpers/pool.h>
 #include <log4cxx/log4cxx.h>
+#include <mutex>
 
 namespace log4cxx
 {
diff --git a/src/main/include/log4cxx/helpers/aprinitializer.h b/src/main/include/log4cxx/helpers/aprinitializer.h
index 6f3f550..fccd18e 100644
--- a/src/main/include/log4cxx/helpers/aprinitializer.h
+++ b/src/main/include/log4cxx/helpers/aprinitializer.h
@@ -30,6 +30,7 @@
 }
 
 #include <apr_time.h>
+#include <mutex>
 
 namespace log4cxx
 {
diff --git a/src/main/include/log4cxx/helpers/loglog.h b/src/main/include/log4cxx/helpers/loglog.h
index d54785d..a4c9241 100644
--- a/src/main/include/log4cxx/helpers/loglog.h
+++ b/src/main/include/log4cxx/helpers/loglog.h
@@ -20,6 +20,7 @@
 
 #include <log4cxx/logstring.h>
 #include <exception>
+#include <mutex>
 
 namespace log4cxx
 {
diff --git a/src/main/include/log4cxx/helpers/serversocket.h b/src/main/include/log4cxx/helpers/serversocket.h
index e6e6d47..7da75b9 100644
--- a/src/main/include/log4cxx/helpers/serversocket.h
+++ b/src/main/include/log4cxx/helpers/serversocket.h
@@ -19,6 +19,7 @@
 #define _LOG4CXX_HELPERS_SERVER_SOCKET_H
 
 #include <log4cxx/helpers/socket.h>
+#include <mutex>
 
 namespace log4cxx
 {
diff --git a/src/main/include/log4cxx/level.h b/src/main/include/log4cxx/level.h
index 4ca4bf2..7848c90 100644
--- a/src/main/include/log4cxx/level.h
+++ b/src/main/include/log4cxx/level.h
@@ -22,6 +22,7 @@
 #include <log4cxx/logstring.h>
 #include <limits.h>
 #include <log4cxx/helpers/object.h>
+#include <mutex>
 
 #if defined(_MSC_VER)
 	#pragma warning ( push )
diff --git a/src/main/include/log4cxx/rolling/action.h b/src/main/include/log4cxx/rolling/action.h
index 0e8d55f..fc44978 100644
--- a/src/main/include/log4cxx/rolling/action.h
+++ b/src/main/include/log4cxx/rolling/action.h
@@ -21,6 +21,7 @@
 #include <log4cxx/portability.h>
 #include <log4cxx/helpers/object.h>
 #include <log4cxx/helpers/pool.h>
+#include <mutex>
 
 namespace log4cxx
 {