119 lines
2.4 KiB
C++
119 lines
2.4 KiB
C++
// RUN: %clang_cc1 -fsyntax-only -verify -Wall -std=c++11 %s
|
|
|
|
namespace std {
|
|
|
|
template <typename T>
|
|
void dummy(T &&) {}
|
|
template <typename T>
|
|
void move(T &&) {}
|
|
template <typename T, typename U>
|
|
void move(T &&, U &&) {}
|
|
|
|
inline namespace __1 {
|
|
template <typename T>
|
|
void forward(T &) {}
|
|
} // namespace __1
|
|
|
|
struct foo {};
|
|
|
|
} // namespace std
|
|
|
|
namespace global {
|
|
|
|
using namespace std;
|
|
|
|
void f() {
|
|
int i = 0;
|
|
std::move(i);
|
|
move(i); // expected-warning{{unqualified call to std::move}}
|
|
(move)(i); // expected-warning{{unqualified call to std::move}}
|
|
std::dummy(1);
|
|
dummy(1);
|
|
std::move(1, 2);
|
|
move(1, 2);
|
|
forward<int>(i); // expected-warning{{unqualified call to std::forward}}
|
|
std::forward<int>(i);
|
|
}
|
|
|
|
template <typename T>
|
|
void g(T &&foo) {
|
|
std::move(foo);
|
|
move(foo); // expected-warning{{unqualified call to std::move}}
|
|
|
|
std::forward<decltype(foo)>(foo);
|
|
forward<decltype(foo)>(foo); // expected-warning{{unqualified call to std::forward}}
|
|
move(1, 2);
|
|
dummy(foo);
|
|
}
|
|
|
|
void call() {
|
|
g(0); //expected-note {{here}}
|
|
}
|
|
|
|
} // namespace global
|
|
|
|
namespace named {
|
|
|
|
using std::forward;
|
|
using std::move;
|
|
|
|
void f() {
|
|
int i = 0;
|
|
move(i); // expected-warning{{unqualified call to std::move}}
|
|
move(1, 2);
|
|
forward<int>(i); // expected-warning{{unqualified call to std::forward}}
|
|
}
|
|
|
|
template <typename T>
|
|
void g(T &&foo) {
|
|
move(foo); // expected-warning{{unqualified call to std::move}}
|
|
forward<decltype(foo)>(foo); // expected-warning{{unqualified call to std::forward}}
|
|
(forward<decltype(foo)>)(foo); // expected-warning{{unqualified call to std::forward}}
|
|
move(1, 2);
|
|
}
|
|
|
|
void call() {
|
|
g(0); //expected-note {{here}}
|
|
}
|
|
|
|
} // namespace named
|
|
|
|
namespace overload {
|
|
using namespace std;
|
|
template <typename T>
|
|
int move(T &&);
|
|
void f() {
|
|
int i = 0;
|
|
move(i);
|
|
}
|
|
} // namespace overload
|
|
|
|
namespace adl {
|
|
void f() {
|
|
move(std::foo{}); // expected-warning{{unqualified call to std::move}}
|
|
}
|
|
|
|
} // namespace adl
|
|
|
|
namespace std {
|
|
|
|
void f() {
|
|
int i = 0;
|
|
move(i); // expected-warning{{unqualified call to std::move}}
|
|
forward<int>(i); // expected-warning{{unqualified call to std::forward}}
|
|
}
|
|
|
|
} // namespace std
|
|
|
|
namespace test_alias {
|
|
namespace alias = std;
|
|
using namespace alias;
|
|
void f() {
|
|
int i = 0;
|
|
move(i); // expected-warning{{unqualified call to std::move}}
|
|
move(1, 2);
|
|
forward<int>(i); // expected-warning{{unqualified call to std::forward}}
|
|
}
|
|
|
|
} // namespace test_alias
|