Abdul Rahman
Abdul Rahman

Reputation: 1384

expected string-literal before ‘)’ when using static_assert in c++17

So when I try to build my c++ application I get compile-time error in the following piece of code

static_assert(sizeof(int32_t) == 4)

This is the error that I get expected string-literal before ‘)’

On some investigation I found out that static_assert required a message param in c++11 which was eliminated in c++17. So does it look like my application is being compiled for c++11?

In my CMakeLists.txt file I have the following lines

set(CMAKE_CXX_STANDARD 17)              
set(CMAKE_CXX_STANDARD_REQUIRED ON)

Shouldn't the above lines build my application for c++17?

Thanks!

Update1 -- Full Error trace

In file included from <project_root>/src/include/buffer/buffer_pool_manager.h:22:0,
                 from <project_root>/src/include/catalog/simple_catalog.h:8,
                 from <project_root>/src/include/catalog/table_generator.h:6,
                 from <project_root>/src/catalog/table_generator.cpp:1:
<project_root>/src/include/storage/page/page.h:70:39: error: expected ‘,’ before ‘)’ token
   static_assert(sizeof(page_id_t) == 4);
                                       ^
<project_root>/src/include/storage/page/page.h:70:39: error: expected string-literal before ‘)’ token
In file included from <project_root>/src/include/buffer/buffer_pool_manager.h:22:0,
                 from <project_root>/src/buffer/buffer_pool_manager.cpp:13:
<project_root>/src/include/storage/page/page.h:70:39: error: expected ‘,’ before ‘)’ token
   static_assert(sizeof(page_id_t) == 4);
                                       ^
<project_root>/src/include/storage/page/page.h:70:39: error: expected string-literal before ‘)’ token
src/CMakeFiles/bustub_shared.dir/build.make:62: recipe for target 'src/CMakeFiles/bustub_shared.dir/buffer/buffer_pool_manager.cpp.o' failed
make[2]: *** [src/CMakeFiles/bustub_shared.dir/buffer/buffer_pool_manager.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
src/CMakeFiles/bustub_shared.dir/build.make:114: recipe for target 'src/CMakeFiles/bustub_shared.dir/catalog/table_generator.cpp.o' failed
make[2]: *** [src/CMakeFiles/bustub_shared.dir/catalog/table_generator.cpp.o] Error 1
CMakeFiles/Makefile2:383: recipe for target 'src/CMakeFiles/bustub_shared.dir/all' failed
make[1]: *** [src/CMakeFiles/bustub_shared.dir/all] Error 2
Makefile:140: recipe for target 'all' failed
make: *** [all] Error 2

Upvotes: 1

Views: 1475

Answers (1)

shiyong
shiyong

Reputation: 11

I changed it to gcc-7 and g++-7 solved my problem.

Upvotes: 1

Related Questions