web-dev-qa-db-ja.com

c ++ 17 `filesystem`は名前空間名ではありません

次のコードで名前空間filesystemが見つからないのはなぜですか。

g ++ -std = c ++ 17 main.cpp -lstdc ++

// #include <filesystem>   <- error, so changed to the following:
#include <experimental/filesystem>

namespace fs = std::filesystem;

int main()
{
    return 0;
}

エラー:

main.cpp:3:21: error: ‘filesystem’ is not a namespace-name
 namespace fs = std::filesystem;
                     ^
main.cpp:3:31: error: expected namespace-name before ‘;’ token
 namespace fs = std::filesystem;

gccバージョン5.4.0 20160609(Ubuntu 5.4.0-6ubuntu1〜16.04.5)

6
ar2015

GCC 5.4.0は2016年6月にリリースされました。 C++ 17標準が採用されるまでの1年以上。それとlibstdc ++のバージョンは、C++ 17のサポートが非常に限られています。 GCCがC++ 17言語機能 ここ を追加したとき、およびlibstdc ++がC++ 17標準ライブラリ機能 ここ を追加したときを確認できます。

GCC 5.4のリリース時点では、ファイルシステムライブラリはまだstd::filesystem名前空間。これは、そのバージョンに含まれている他の<experimental/...>ヘッダーとともに、std::experimental名前空間。

10
Miles Budnek

<exprimental/..>は実験的な名前空間を意味します:

namespace fs = std::exprimental::filesystem;

参照: http://en.cppreference.com/w/cpp/experimental/fs/path

9
PiotrNycz