2016-10-21 3 views
3

std :: variant를 사용하여 코드를 컴파일하는 데 문제가 있습니다.C++ variant 해당 파일 또는 디렉토리가 없습니다.

#include <variant> 
#include <string> 

int main() 
{ 
    std::variant<int, float> v, w; 
    v = 12; // v contains int 
    int i = std::get<int>(v); 
    w = std::get<int>(v); 
    w = std::get<0>(v); // same effect as the previous line 
    w = v; // same effect as the previous line 

    try { 
     std::get<float>(w); // w contains int, not float: will throw 
    } 
    catch (std::bad_variant_access&) {} 

    std::variant<std::string> v("abc"); // converting constructors work when unambiguous 
    v = "def"; // converting assignment also works when unambiguous 
} 

cppreference.com에서 찾을 수 있지만,이 오류 추가합니다 : "심각한 오류 : 변종 : 나는 -std와 g ++ 우분투 5.4/6.2와 페도라이 코드 = C++ (17)를 컴파일하려고 그런 파일 또는 디렉토리 ".

+1

는 모든 플래그를 갖춘 컴파일러의 호출을 포함하십시오. 'std :: variant'는 C++ 17 기능입니다. '-std = C++ 17'을 지정 했습니까? – Jonas

+0

감사합니다. –

답변

1

std::variant을 C++ 17에 첨가 하였다.

gcc는 C++ 17 표준의 관련 비트를 완전히 지원하지 않습니다.

에는 std::variant이 표시되지 않습니다.

+1

적어도 [gcc 7 스냅 샷] (https://godbolt.org/g/jirajD)으로 컴파일하는 것처럼 보입니다. – NathanOliver

1
  1. g ++ - 7; 예 : 우분투 sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y sudo apt-get update sudo apt-get install g++-7
  2. 실행 /usr/bin/g++-7 -std=c++1z your_program.cc

  3. 옵션 경우 cmake 시스템을 사용하는 경우, 다음 줄을 추가 set(CMAKE_CXX_COMPILER "/usr/bin/g++-7") set(CMAKE_CXX_FLAGS "-std=c++1z")

관련 문제