[cfe-users] help with linux setup and clang-6

Csaba Raduly via cfe-users cfe-users at lists.llvm.org
Sat Sep 1 00:54:13 PDT 2018

Hi Milan,

On Sat, Sep 1, 2018 at 1:11 AM, Milan Andric via cfe-users wrote:
> Test program:
> ```test.cpp
> #include <optional>
> int main()
> {
>     std::optional<int> o1;
> }
> ```
> Error I am having below. I tried with a few different flags but always with
> the same failure.
> ```
> $ clang++-6.0 -std=c++17 -o test.o test.cpp
> test.cpp:1:10: fatal error: 'optional' file not found
> #include <optional>
>          ^~~~~~~~~~
> 1 error generated.
> ```
> Clang version and linkage info.
> ```
> $ clang++-6.0 --version
> clang version 6.0.1-svn334776-1~exp1~20180826122732.96 (branches/release_60)
> Target: x86_64-pc-linux-gnu
> Thread model: posix
> InstalledDir: /usr/bin

In order to use std::optional, you need a Standard C++ Library that
supports C++17. For clang, this is libc++, which is usually packaged

If clang can't find libc++, it will search for and use GCC's Standard
C++ Library (libstdc++). If you run clang++ with the -v switch, you
can see what it found.

In short, without libc++, clang falls back to GCC's libstdc++. This
means that in order to be able to use C++17 *library* features (like
std::optional), you need a libstdc++ which implements these features.
Bionic Beaver (18.04) includes GCC 7.3, whose libstdc++ implements
std::optional. This is why your test succeeds on 18.04

You can get very substantial performance improvements
by not doing the right thing. - Scott Meyers, An Effective C++11/14 Sampler
So if you're looking for a completely portable, 100% standards-conformat way
to get the wrong information: this is what you want. - Scott Meyers (C++TDaWYK)

More information about the cfe-users mailing list