- Notifications
You must be signed in to change notification settings - Fork 14.9k
Open
Labels
clang-tidyfalse-positiveWarning fires when it should notWarning fires when it should notregression:21Regression in 21 releaseRegression in 21 release
Description
#include <memory> #include <vector> struct S {}; static void f() { /*const*/ S *const newdata = new S; std::vector<std::unique_ptr<S>> data; data.emplace_back(newdata); }
<source>:7:15: warning: pointee of variable 'newdata' of type 'S *const' can be declared 'const' [misc-const-correctness] 7 | /*const*/ S *const newdata = new S; | ^ | const
https://godbolt.org/z/Yr888PnPn
The resulting code fails to compile:
-checks=-*,misc-const-correctness /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/new_allocator.h:191:23: error: no matching constructor for initialization of 'std::unique_ptr<S>' [clang-diagnostic-error] 191 | { ::new((void *)__p) _Up(std::forward<_Args>(__args)...); } | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/alloc_traits.h:674:8: note: in instantiation of function template specialization 'std::__new_allocator<std::unique_ptr<S>>::construct<std::unique_ptr<S>, const S *const &>' requested here 674 | __a.construct(__p, std::forward<_Args>(__args)...); | ^ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/vector.tcc:121:21: note: in instantiation of function template specialization 'std::allocator_traits<std::allocator<std::unique_ptr<S>>>::construct<std::unique_ptr<S>, const S *const &>' requested here 121 | _Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish, | ^ <source>:10:10: note: in instantiation of function template specialization 'std::vector<std::unique_ptr<S>>::emplace_back<const S *const &>' requested here 10 | data.emplace_back(newdata); | ^ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:311:2: note: candidate constructor template not viable: 1st argument ('const S *const') would lose const qualifier 311 | unique_ptr(pointer __p) noexcept | ^ ~~~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:353:12: note: candidate constructor template not viable: no known conversion from 'const S *const' to 'nullptr_t' (aka 'std::nullptr_t') for 1st argument 353 | constexpr unique_ptr(nullptr_t) noexcept | ^ ~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:360:7: note: candidate constructor not viable: no known conversion from 'const S *const' to 'unique_ptr<S>' for 1st argument 360 | unique_ptr(unique_ptr&&) = default; | ^ ~~~~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:525:7: note: candidate constructor not viable: no known conversion from 'const S *const' to 'const unique_ptr<S>' for 1st argument 525 | unique_ptr(const unique_ptr&) = delete; | ^ ~~~~~~~~~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:374:2: note: candidate template ignored: could not match 'unique_ptr<_Up, _Ep>' against 'const S *const' 374 | unique_ptr(unique_ptr<_Up, _Ep>&& __u) noexcept | ^ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:385:2: note: candidate template ignored: could not match 'auto_ptr<_Up>' against 'const S *const' 385 | unique_ptr(auto_ptr<_Up>&& __u) noexcept; | ^ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:298:12: note: candidate constructor template not viable: requires 0 arguments, but 1 was provided 298 | constexpr unique_ptr() noexcept | ^ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:325:2: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided 325 | unique_ptr(pointer __p, const deleter_type& __d) noexcept | ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:338:2: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided 338 | unique_ptr(pointer __p, | ^ ~~~~~~~~~~~~ 339 | __enable_if_t<!is_lvalue_reference<_Del>::value, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 340 | _Del&&> __d) noexcept | ~~~~~~~~~~~ /opt/compiler-explorer/gcc-snapshot/lib/gcc/x86_64-linux-gnu/16.0.0/../../../../include/c++/16.0.0/bits/unique_ptr.h:347:2: note: candidate constructor template not viable: requires 2 arguments, but 1 was provided 347 | unique_ptr(pointer, | ^ ~~~~~~~~ 348 | __enable_if_t<is_lvalue_reference<_Del>::value, | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 349 | _DelUnref&&>) = delete; | ~~~~~~~~~~~~
sean-mcmanus
Metadata
Metadata
Assignees
Labels
clang-tidyfalse-positiveWarning fires when it should notWarning fires when it should notregression:21Regression in 21 releaseRegression in 21 release