56 lines
1.6 KiB
C++
56 lines
1.6 KiB
C++
// RUN: %check_clang_tidy %s misc-const-correctness %t -- -- -std=c++17 -fno-delayed-template-parsing
|
|
|
|
template <typename L, typename R>
|
|
struct MyPair {
|
|
L left;
|
|
R right;
|
|
MyPair(const L &ll, const R &rr) : left{ll}, right{rr} {}
|
|
};
|
|
|
|
void f() {
|
|
// FIXME: Decomposition Decls need special treatment, because they require to use 'auto'
|
|
// and the 'const' should only be added if all elements can be const.
|
|
// The issue is similar to multiple declarations in one statement.
|
|
// Simply bail for now.
|
|
auto [np_local0, np_local1] = MyPair<int, int>(42, 42);
|
|
np_local0++;
|
|
np_local1++;
|
|
// CHECK-FIXES-NOT: auto const [np_local0, np_local1]
|
|
|
|
auto [np_local2, p_local0] = MyPair<double, double>(42., 42.);
|
|
np_local2++;
|
|
// CHECK-FIXES-NOT: auto const [np_local2, p_local0]
|
|
|
|
auto [p_local1, np_local3] = MyPair<double, double>(42., 42.);
|
|
np_local3++;
|
|
// CHECK-FIXES-NOT: auto const [p_local1, np_local3]
|
|
|
|
auto [p_local2, p_local3] = MyPair<double, double>(42., 42.);
|
|
// CHECK-FIXES-NOT: auto const [p_local2, p_local3]
|
|
}
|
|
|
|
void g() {
|
|
int p_local0 = 42;
|
|
// CHECK-MESSAGES: [[@LINE-1]]:3: warning: variable 'p_local0' of type 'int' can be declared 'const'
|
|
// CHECK-FIXES: int const p_local0 = 42;
|
|
}
|
|
|
|
template <typename SomeValue>
|
|
struct DoGooder {
|
|
DoGooder(void *accessor, SomeValue value) {
|
|
}
|
|
};
|
|
struct Bingus {
|
|
static constexpr auto someRandomConstant = 99;
|
|
};
|
|
template <typename Foo>
|
|
struct HardWorker {
|
|
HardWorker() {
|
|
const DoGooder<int> anInstanceOf(nullptr, Foo::someRandomConstant);
|
|
}
|
|
};
|
|
struct TheContainer {
|
|
HardWorker<Bingus> m_theOtherInstance;
|
|
// CHECK-FIXES-NOT: HardWorker<Bingus> const m_theOtherInstance
|
|
};
|