From faa785f3f6464cdaceb3a15861d50f6b7af3881a Mon Sep 17 00:00:00 2001 From: Ben Doherty Date: Wed, 12 Aug 2020 15:21:39 -0700 Subject: [PATCH] Switch to C++17 (#2940) --- CMakeLists.txt | 4 +-- android/build.gradle | 2 +- filament/README.md | 6 ++--- java/filamat/CMakeLists.txt | 4 +-- java/filament/CMakeLists.txt | 4 +-- java/gltfio/CMakeLists.txt | 4 +-- libs/filamat/README.md | 6 ++--- web/filament-js/jsbindings.cpp | 47 ++++++++++++++++++++++++++++++++++ 8 files changed, 62 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 72a6001c28..96de9b0f8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -211,9 +211,9 @@ endif() # ================================================================================================== # General compiler flags # ================================================================================================== -set(CXX_STANDARD "-std=c++14") +set(CXX_STANDARD "-std=c++17") if (WIN32) - set(CXX_STANDARD "/std:c++14") + set(CXX_STANDARD "/std:c++17") endif() if (MSVC) diff --git a/android/build.gradle b/android/build.gradle index 360b6d3ada..918989034b 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -74,7 +74,7 @@ buildscript { ] ext.cppFlags = [ - "-std=c++14", + "-std=c++17", "-Wno-unused-command-line-argument", // Required to support API levels below 23 "-Wl,--hash-style=both", diff --git a/filament/README.md b/filament/README.md index acdabb0c77..abc322391a 100644 --- a/filament/README.md +++ b/filament/README.md @@ -94,7 +94,7 @@ main: main.o $(CC) -Llib/x86_64/ main.o $(FILAMENT_LIBS) -lpthread -lc++ -ldl -o main main.o: main.cpp - $(CC) -Iinclude/ -std=c++14 -pthread -c main.cpp + $(CC) -Iinclude/ -std=c++17 -pthread -c main.cpp clean: rm -f main main.o @@ -113,7 +113,7 @@ main: main.o $(CC) -Llib/x86_64/ main.o $(FILAMENT_LIBS) $(FRAMEWORKS) -o main main.o: main.cpp - $(CC) -Iinclude/ -std=c++14 -c main.cpp + $(CC) -Iinclude/ -std=c++17 -c main.cpp clean: rm -f main main.o @@ -142,7 +142,7 @@ main.exe: main.obj gdi32.lib user32.lib opengl32.lib main.obj: main.cpp - $(CC) /MT /Iinclude\\ /std:c++14 /c main.cpp + $(CC) /MT /Iinclude\\ /std:c++17 /c main.cpp clean: del main.exe main.obj diff --git a/java/filamat/CMakeLists.txt b/java/filamat/CMakeLists.txt index dfb7fd23a8..727592d8bb 100644 --- a/java/filamat/CMakeLists.txt +++ b/java/filamat/CMakeLists.txt @@ -30,9 +30,9 @@ set(TARGET filamat-jni) include_directories(${JNI_INCLUDE_DIRS}) -set(CXX_STANDARD "-std=c++14") +set(CXX_STANDARD "-std=c++17") if (WIN32) - set(CXX_STANDARD "/std:c++14") + set(CXX_STANDARD "/std:c++17") endif() set(FILAMAT_DIR ../../android/filamat-android) diff --git a/java/filament/CMakeLists.txt b/java/filament/CMakeLists.txt index 3926e65a4c..b4cfed5c78 100644 --- a/java/filament/CMakeLists.txt +++ b/java/filament/CMakeLists.txt @@ -28,9 +28,9 @@ endif() # ================================================================================================== set(TARGET filament-jni) -set(CXX_STANDARD "-std=c++14") +set(CXX_STANDARD "-std=c++17") if (WIN32) - set(CXX_STANDARD "/std:c++14") + set(CXX_STANDARD "/std:c++17") endif() set(ANDROID_DIR ../../android) diff --git a/java/gltfio/CMakeLists.txt b/java/gltfio/CMakeLists.txt index 0a862ecec9..8a589f1281 100644 --- a/java/gltfio/CMakeLists.txt +++ b/java/gltfio/CMakeLists.txt @@ -28,9 +28,9 @@ endif() # ================================================================================================== set(TARGET gltfio-jni) -set(CXX_STANDARD "-std=c++14") +set(CXX_STANDARD "-std=c++17") if (WIN32) - set(CXX_STANDARD "/std:c++14") + set(CXX_STANDARD "/std:c++17") endif() set(ANDROID_DIR ../../android) diff --git a/libs/filamat/README.md b/libs/filamat/README.md index 0cbebf2b1f..dd81004275 100644 --- a/libs/filamat/README.md +++ b/libs/filamat/README.md @@ -93,7 +93,7 @@ main: main.o $(CC) -Llib/x86_64/ -stdlib=libc++ main.o $(FILAMENT_LIBS) -lpthread -ldl -o main main.o: main.cpp - $(CC) -Iinclude/ -std=c++14 -stdlib=libc++ -pthread -c main.cpp + $(CC) -Iinclude/ -std=c++17 -stdlib=libc++ -pthread -c main.cpp clean: rm -f main main.o @@ -111,7 +111,7 @@ main: main.o $(CC) -Llib/x86_64/ main.o $(FILAMENT_LIBS) -o main main.o: main.cpp - $(CC) -Iinclude/ -std=c++14 -c main.cpp + $(CC) -Iinclude/ -std=c++17 -c main.cpp clean: rm -f main main.o @@ -138,7 +138,7 @@ main.exe: main.obj $(CC) main.obj $(FILAMENT_LIBS) gdi32.lib user32.lib opengl32.lib main.obj: main.cpp - $(CC) /MT /Iinclude/ /std:c++14 /c main.cpp + $(CC) /MT /Iinclude/ /std:c++17 /c main.cpp clean: del main.exe main.obj diff --git a/web/filament-js/jsbindings.cpp b/web/filament-js/jsbindings.cpp index c977d216ed..b7f87433f6 100644 --- a/web/filament-js/jsbindings.cpp +++ b/web/filament-js/jsbindings.cpp @@ -134,6 +134,53 @@ namespace emscripten { BIND(utils::EntityManager) BIND(VertexBuffer) BIND(View) + + // embind is missing a template definition for "noexcept" methods, so + // we're supplying it ourselves while waiting for the upstream fix. + template + struct RegisterClassMethod { + + template + static void invoke(const char* methodName, + ReturnType (ClassType::*memberFunction)(Args...) noexcept) { + auto invoker = &MethodInvoker::invoke; + + typename WithPolicies::template ArgTypeList, Args...> args; + _embind_register_class_function( + TypeID::get(), + methodName, + args.getCount(), + args.getTypes(), + getSignature(invoker), + reinterpret_cast(invoker), + getContext(memberFunction), + isPureVirtual::value); + } + }; + + // embind is missing a template definition for "const noexcept" methods, so + // we're supplying it ourselves while waiting for the upstream fix. + template + struct RegisterClassMethod { + + template + static void invoke(const char* methodName, + ReturnType (ClassType::*memberFunction)(Args...) const noexcept) { + auto invoker = &MethodInvoker::invoke; + + typename WithPolicies::template ArgTypeList, Args...> args; + _embind_register_class_function( + TypeID::get(), + methodName, + args.getCount(), + args.getTypes(), + getSignature(invoker), + reinterpret_cast(invoker), + getContext(memberFunction), + isPureVirtual::value); + } + }; + } } #undef BIND