2016-07-18 11 views
5

Mam projekt CMake Qt, który wykorzystuje kilka funkcji w C++ 14, w tym std::make_unique. Zazwyczaj będzie odbywać poprzez:przełączanie z Qt 5.6 na Qt 5.7 - "brak członka" make_unique "w przestrzeni nazw std"

LIST(APPEND CMAKE_CXX_FLAGS -std=c++14) 

lub

ADD_COMPILE_OPTIONS(-std=c++14) 

Chciałbym uaktualnić projekt z wersji 5.6 do 5.7, ale podczas kompilacji testowej były wielokrotne awarie z błędem

żaden członek 'make_unique' w przestrzeni nazw std

Sprawdziłem, czy wszystkie odpowiednie nagłówki i opcje kompilacji są na miejscu i wykluczają wszelkie problemy środowiskowe. To zdecydowanie problem z używaniem Qt 5.7. Czy istnieje jakieś obejście?

Odpowiedz

9

Okazuje się, że jest to known problem with CMake/Qt 5.7. Wydaje się, ponieważ CMake 3.1 właściwy sposób w celu określenia, które C++ standard zastosowania w CMake jest z

SET(CMAKE_CXX_STANDARD 14) 

jako Qt 5.7, stosując dowolną metodę wyjątkiem do CMAKE_CXX_STANDARD spowoduje C++ 14 błędów, takich jak ten wspomniany w pytaniu. Użycie tej metody wyjaśniło wszystkie błędy dla mojej kompilacji.

Anegdotycznie, raport o błędzie jest dość interesujący, ponieważ pierwotnie problem ten uważano za blokowanie wersji, a następnie obniżono go do znanego problemu, a ostatecznie (pozornie) usunięto go z wersji known issue list.

+2

*** zgłoszenie błędu jest dość interesującą lekturą *** Uzgodnione, Problem mówi, że jest zamknięty, jak ustalony. To dziwne, aby zamknąć jako naprawione, ale aby nie naprawiać problemu, po prostu dokument, że istnieje. – drescherjm