2016-10-21 32 views
3

std :: variantを使用してコードをコンパイルする際に問題があります。 私はグラムで、このコードをコンパイルしようとする++ 5.4/6.2のUbuntuとFedoraに-std = C++ 17で:C++ variantこのようなファイルやディレクトリはありません

cppreference.comで見つけ
#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 
} 

が、このエラーはappend:「致命的なエラー:バリアント:いいえ、そのようなファイルまたはディレクトリー "と呼びます。

+1

は、すべてのフラグとの完全なコンパイラの呼び出しを記載してください。 'std :: variant'はC++ 17の機能です。 '-std = C++ 17'を指定しましたか? – Jonas

+0

私はおかげで更新 –

答えて

1

std::variantをC++で添加した。

gccは、C++ 17標準の関連ビットを完全にはサポートしていません。

には、std::variantが表示されていません。

+1

少なくとも[gcc 7 snapshot](https://godbolt.org/g/jirajD)でコンパイルされているように見えますが、 – NathanOliver

1
  1. g ++ - 7をインストールします。例えばUbuntuは 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")

関連する問題