Mehdi AMINI via llvm-dev
2021-Feb-11 22:26 UTC
[llvm-dev] Clang++: No member name 'make_unique' in namespace 'std'
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/bca0d680/attachment.html>
Nevin Liber via llvm-dev
2021-Feb-11 22:40 UTC
[llvm-dev] Clang++: No member name 'make_unique' in namespace 'std'
On Thu, Feb 11, 2021 at 4:27 PM Mehdi AMINI via llvm-dev < llvm-dev at lists.llvm.org> wrote:> Maybe `clang++ -std=c++11 a.cpp` ? >Note: make_unique was added in C++14. -- Nevin ":-)" Liber <mailto:nevin at cplusplusguy.com <nevin at eviloverlord.com>> +1-847-691-1404 -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20210211/2209d03a/attachment.html>
users users via llvm-dev
2021-Feb-11 23:04 UTC
[llvm-dev] Clang++: No member name 'make_unique' in namespace 'std'
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>