[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