Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to use std::filesystem on gcc 8?

I have updated version of gcc, gcc --version produces the following output

    gcc (Ubuntu 8.1.0-5ubuntu1~16.04) 8.1.0
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

i can include filesystem in header file without any error

#include<filesystem>

But when i try to access the namespace filesystem like below then i get the error

namespace fs = std::filesystem;

Error message

error: ‘filesystem’ is not a namespace-name
 namespace fs = std::filesystem;

This seems to be weird since the gcc 8 has support for std::filesystem and it is not available in namespace, am i doing anything wrong in accessing std::filesystem?

and yes i built with -std=c++17

like image 332
Naveen Avatar asked Nov 08 '18 05:11

Naveen


2 Answers

Add the filesystem library as an argument to your compiler that will be forwarded to the linker. Also make sure you are using C++17. Both g++ and clang++ accepts this particular format:

--std=c++17 -lstdc++fs
like image 185
Ted Lyngmo Avatar answered Nov 12 '22 05:11

Ted Lyngmo


Because of the silly rep system, I can't make this a comment on slashmais's answer.

When using an IDE, make sure that you also set the compiler to be used to GCC8 or above.

In my case, despite being installed, CodeLite was using a lower version of GCC and causing headaches (re: not finding the header)!

Manually setting CodeLite to use gcc-8 (instead of just gcc fixed this problem.

like image 8
LCWilliams Avatar answered Nov 12 '22 04:11

LCWilliams