Improve the CMake C++ flag checker

This checks the flag on the compiler AND linker which allows it to work
with flags such as -flto and -fsanitize=address
diff --git a/cmake/AddCXXCompilerFlag.cmake b/cmake/AddCXXCompilerFlag.cmake
index 7c0f5a3..870f11a 100644
--- a/cmake/AddCXXCompilerFlag.cmake
+++ b/cmake/AddCXXCompilerFlag.cmake
@@ -20,18 +20,17 @@
 include(CheckCXXCompilerFlag)
 
 function(add_cxx_compiler_flag FLAG)
-  if(ARGV1)
-    set(VARIANT ${ARGV1})
-    string(TOLOWER ${VARIANT} VARIANT)
-    set(VARIANT " ${VARIANT}")
-  endif()
-  string(TOUPPER "HAVE_${FLAG}" SANITIZED_FLAG)
+  string(TOUPPER "HAVE_CXX_FLAG_${FLAG}" SANITIZED_FLAG)
+  string(REPLACE "+" "X" SANITIZED_FLAG ${SANITIZED_FLAG})
   string(REGEX REPLACE "[^A-Za-z_0-9]" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
   string(REGEX REPLACE "_+" "_" SANITIZED_FLAG ${SANITIZED_FLAG})
-  check_cxx_compiler_flag(${FLAG} ${SANITIZED_FLAG})
+  set(CMAKE_REQUIRED_FLAGS "${FLAG}")
+  check_cxx_compiler_flag("" ${SANITIZED_FLAG})
   if(${SANITIZED_FLAG})
-    string(REGEX REPLACE "[^A-Za-z_0-9]" "_" VARIANT "${VARIANT}")
-    string(TOUPPER "${VARIANT}" VARIANT)
+    set(VARIANT ${ARGV1})
+    if(ARGV1)
+      string(TOUPPER "_${VARIANT}" VARIANT)
+    endif()
     set(CMAKE_CXX_FLAGS${VARIANT} "${CMAKE_CXX_FLAGS${VARIANT}} ${FLAG}" PARENT_SCOPE)
   endif()
 endfunction()