From 3a2c736b41fb394b389607b0ccf96611c42319f5 Mon Sep 17 00:00:00 2001 From: Brad King Date: Wed, 1 Aug 2018 14:01:47 -0400 Subject: Extend C++17/C++14 feature checks to require unique_ptr When testing compiler modes higher than C++11 for constructs we need, include a check for using `unique_ptr` in that mode. The PGI 18.4 compiler in some environments supports `unique_ptr` in C++11 mode but is broken for C++14 and C++17. Check that `unique_ptr` works in these modes before using one. --- Source/Checks/cm_cxx14_check.cmake | 2 +- Source/Checks/cm_cxx14_check.cpp | 5 ++++- Source/Checks/cm_cxx17_check.cmake | 2 +- Source/Checks/cm_cxx17_check.cpp | 4 +++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Source/Checks/cm_cxx14_check.cmake b/Source/Checks/cm_cxx14_check.cmake index a78ba35..38606b9 100644 --- a/Source/Checks/cm_cxx14_check.cmake +++ b/Source/Checks/cm_cxx14_check.cmake @@ -1,5 +1,5 @@ set(CMake_CXX14_BROKEN 0) -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|PGI") if(NOT CMAKE_CXX14_STANDARD_COMPILE_OPTION) set(CMake_CXX14_WORKS 0) endif() diff --git a/Source/Checks/cm_cxx14_check.cpp b/Source/Checks/cm_cxx14_check.cpp index f5806a9..9369ba2 100644 --- a/Source/Checks/cm_cxx14_check.cpp +++ b/Source/Checks/cm_cxx14_check.cpp @@ -1,5 +1,8 @@ #include +#include + int main() { - return 0; + std::unique_ptr u(new int(0)); + return *u; } diff --git a/Source/Checks/cm_cxx17_check.cmake b/Source/Checks/cm_cxx17_check.cmake index 83d3971..4da2fd7 100644 --- a/Source/Checks/cm_cxx17_check.cmake +++ b/Source/Checks/cm_cxx17_check.cmake @@ -1,5 +1,5 @@ set(CMake_CXX17_BROKEN 0) -if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang") +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU|Clang|PGI") if(NOT CMAKE_CXX17_STANDARD_COMPILE_OPTION) set(CMake_CXX17_WORKS 0) endif() diff --git a/Source/Checks/cm_cxx17_check.cpp b/Source/Checks/cm_cxx17_check.cpp index 2cbf1d5..4e89184 100644 --- a/Source/Checks/cm_cxx17_check.cpp +++ b/Source/Checks/cm_cxx17_check.cpp @@ -1,7 +1,9 @@ #include +#include #include int main() { - return 0; + std::unique_ptr u(new int(0)); + return *u; } -- cgit v0.12