Включение библиотеки заголовков в новый проект показывает двойную ошибку «constexpr» - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть два отдельных проекта. В первом проекте используется библиотека только заголовка range-v3 и Я хочу использовать библиотеку диапазонов и в моем новом проекте , но включение библиотеки показывает ошибку constexpr с дубликатом. У меня нет duplicate error в моем первом проекте.

В итоге:

Почему мой компилятор выдает сообщение duplicate symbol error при использовании библиотеки диапазонов в совершенно новом проекте и Как я могу решить эту проблему?

CLion 2019.3 (опция включения проекта C ++ 20)

G CC 9.2

range-v3 library by ericniebler

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 имеет опцию c, которую я забыл использовать (см. Ответ).

1 Ответ

0 голосов
/ 09 февраля 2020

Мне нужно было добавить указанную опцию компилятора c:

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

Теперь все работает нормально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...