0

我有两个独立的项目。第一个项目使用 range-v3 仅标头库,我也想在我的新项目中使用范围库,但包含该库会显示重复constexpr错误。我的第一个项目中没有duplicate error

总之:

为什么我的编译器duplicate symbol error在一个全新的项目中使用范围库时会抛出该消息,我该如何解决这个问题?

CLion 2019.3(项目启用 C++20 选项)

海合会 9.2

ericniebler 的 range-v3 库

project structure

-cmake_build-debug
CMakeLists.txt
main.cpp

我的主要:

#include <vector>
#include <range/v3/view/transform.hpp> //throws error

int main() {

    std::vector<int> myvec{1,2,3,4};
    return 0;
}

在我的旧项目中工作的 CMake 代码:

cmake_minimum_required(VERSION 3.15)

project(codingchallange C CXX)

set(CMAKE_CXX_STANDARD 20)

set(SOURCE_FILES main.cpp)

add_library(range_v3 INTERFACE IMPORTED) set_target_properties(range_v3 PROPERTIES
        INTERFACE_INCLUDE_DIRECTORIES /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include)

add_executable(codingchallange ${SOURCE_FILES})

target_link_libraries(codingchallange range_v3) #link libraries to exe

我的编译器抛出的错误消息:

Scanning dependencies of target codingchallange
[ 50%] Building CXX object CMakeFiles/codingchallange.dir/main.cpp.o
In file included from /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range_fwd.hpp:22,
                 from /home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:23,
                 from /home/myname/CLionProjects/codingchallange/main.cpp:4:
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:207:19: error: duplicate ‘constexpr’
  207 |         constexpr CPP_concept_bool has_allocator_type =
      |                   ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:211:19: error: duplicate ‘constexpr’
  211 |         constexpr CPP_concept_bool range_and_not_view =
      |                   ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/range/conversion.hpp:223:19: error: duplicate ‘constexpr’
  223 |         constexpr CPP_concept_bool convertible_to_cont_impl_ =
      |                   ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:74:19: error: duplicate ‘constexpr’
   74 |         constexpr CPP_concept_bool iter_transform_1_readable =
      |                   ^~~~~~~~~~~~~~~~
/home/myname/CLionProjects/Libraries2/range-v3/range-v3-master/include/range/v3/view/transform.hpp:93:19: error: duplicate ‘constexpr’
   93 |         constexpr CPP_concept_bool iter_transform_2_readable =

已解决:我的旧 CMake 有一个我忘记使用的特定编译器选项(见答案)。

4

1 回答 1

0

我必须添加一个特定的编译器选项:

add_compile_options(-fconcepts) #enables concepts(unstable). 
#Stable versions will be released with gcc/g++ 10

现在它工作正常。

于 2020-02-09T10:16:11.943 回答