[llvm-dev] Clang++: No member name 'make_unique' in namespace 'std'
Andrzej Warzynski via llvm-dev
llvm-dev at lists.llvm.org
Wed Feb 17 06:46:54 PST 2021
Shelton,
Please try adding this when compiling a.cpp (earlier mentioned by David):
-stdlib=libc++
AFAIK, even when you _do_ build LLVM's libc++, clang++ will use
libstdc++ by default anyway. In your case, that's your rather old system
libstdc++. When you run "module load gcc/7.3.0" you are most likely
loading libstdc++ that corresponds to gcc-7.3.0 (and which is C++14
compatible). So the compilation works.
I hope that this helps!
Andrzej
On 11/02/2021 23:04, users users via llvm-dev wrote:
> Dear Mehdi,
>
> Thank you so much for answering my questions - so quick!
> 1. " clang++ a.cpp -std=c++11" seems does not work either. But when I
> add a gcc modulel "module load gcc/7.3.0", it is compiled successfully
> without error - event llvm is built with gcc/8.2.0. <http://8.2.0.>
>
> 2. I used the options to build llvm
> -DLLVM_ENABLE_PROJECTS="clang;libcxx;libcxxabi;openmp;parallel-libs"
> -DCMAKE_BUILD_TYPE="Release" -DLLVM_TARGETS_TO_BUILD=PowerPC
> -DLLVM_ENABLE_LIBPFM=OFF -DRUN_HAVE_GNU_POSIX_REGEX=0
> -DRUN_HAVE_THREAD_SAFETY_ATTRIBUTES=0 -Wno-dev ../llvm
> are they correct options?
>
> Thanks!
> Shelton.
>
>
> On Thu, Feb 11, 2021 at 4:27 PM Mehdi AMINI <joker.eph at gmail.com
> <mailto:joker.eph at gmail.com>> wrote:
>
>
>
> On Thu, Feb 11, 2021 at 2:21 PM users users via llvm-dev
> <llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>> wrote:
>
> Dear LLVM Developers:
>
> 1. Recently I built llvm/12.0 on IBM power8 using gcc/8.2.0.
> <http://8.2.0.> When I run clang++ with an example from
> https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique
> <https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique>:
>
> #include <iostream>
>
> #include <iomanip>
> #include <memory>
>
> struct Vec3
> {
> int x, y, z;
>
> // following constructor is no longer needed since C++20
> Vec3(int x= 0,int y= 0,int z= 0) noexcept : x(x), y(y), z(z) { }
>
> friend std::ostream <http://en.cppreference.com/w/cpp/io/basic_ostream>& operator<<(std::ostream <http://en.cppreference.com/w/cpp/io/basic_ostream>& os,const Vec3& v) {
> return os<< "{ x=" << v.x << ", y=" << v.y << ", z=" << v.z << " }";
> }
> };
>
> int main()
> {
> // Use the default constructor.
> std::unique_ptr <http://en.cppreference.com/w/cpp/memory/unique_ptr><Vec3 > v1= std::make_unique<Vec3 >();
> // Use the constructor that matches these arguments
> std::unique_ptr <http://en.cppreference.com/w/cpp/memory/unique_ptr><Vec3 > v2= std::make_unique<Vec3 >(0,1,2);
> // Create a unique_ptr to an array of 5 elements
> std::unique_ptr <http://en.cppreference.com/w/cpp/memory/unique_ptr><Vec3[]> v3= std::make_unique<Vec3[]>(5);
>
> std::cout <http://en.cppreference.com/w/cpp/io/cout> << "make_unique<Vec3>(): " << *v1<< '\n'
> << "make_unique<Vec3>(0,1,2): " << *v2<< '\n'
> << "make_unique<Vec3[]>(5): ";
> for (int i= 0; i< 5; i++) {
> std::cout <http://en.cppreference.com/w/cpp/io/cout> << std::setw <http://en.cppreference.com/w/cpp/io/manip/setw>(i? 30 : 0) << v3[i] << '\n';
> }
> }
>
>
> It failed with the following errors:
> Error: no member named 'make_unique' in namespace 'std'
> std::unique_ptr<Vec3> v1 = std::make_unique<Vec3>();
> ... ...
>
> Any idea and suggestion about what is going on? or have I missed
> something? The command I used to compile the code above:
> $ clang++ a.cpp
>
>
> Maybe `clang++ -std=c++11 a.cpp` ?
>
>
> 2. Comparing this llvm with my current gcc/8.2.0 on a project
> (openmp code running 1 thread), it showed that llvm is almost
> twice as slow as gcc (both compile with -O3) on my IBM power8
> machine. Is it suppose to be with such slower performance than gcc?
>
>
> It is very sensitive to how you built it, by default it'll be built
> in debug mode. For best performance you would ideally you enable
> Release mode, and bootstrap with LTO/PGO.
>
> --
> Mehdi
>
>
> Thank you very much for any advice!
>
> Best Regards,
> Shelton
>
>
>
>
>
>
>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org <mailto:llvm-dev at lists.llvm.org>
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
> <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev>
>
>
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>
More information about the llvm-dev
mailing list