[llvm-dev] Clang++: No member name 'make_unique' in namespace 'std'

users users via llvm-dev llvm-dev at lists.llvm.org
Thu Feb 11 15:04:24 PST 2021


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.

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> wrote:

>
>
> On Thu, Feb 11, 2021 at 2:21 PM users users via llvm-dev <
> 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. When I
>> run clang++ with an example from
>> 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
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210211/85bc3e19/attachment.html>


More information about the llvm-dev mailing list