23 lines
958 B
C++
23 lines
958 B
C++
|
// RUN: %clang_cc1 -fsyntax-only -verify %s
|
||
|
|
||
|
// Ensure we undo the rewrite from `a++` to a binary `a ++ 0` before profiling.
|
||
|
namespace PostIncDec {
|
||
|
// Increment / decrement as UnaryOperator.
|
||
|
template<typename T> auto inc(T &a) -> decltype(a++) {} // expected-note {{previous}}
|
||
|
template<typename T> auto dec(T &a) -> decltype(a--) {} // expected-note {{previous}}
|
||
|
|
||
|
struct X {};
|
||
|
void operator++(X&, int);
|
||
|
void operator--(X&, int);
|
||
|
// Increment / decrement as CXXOverloadedCallExpr. These are redefinitions.
|
||
|
template<typename T> auto inc(T &a) -> decltype(a++) {} // expected-error {{redefinition}} expected-note {{candidate}}
|
||
|
template<typename T> auto dec(T &a) -> decltype(a--) {} // expected-error {{redefinition}} expected-note {{candidate}}
|
||
|
|
||
|
// These are not ambiguous calls.
|
||
|
void f(X x) {
|
||
|
// FIXME: Don't produce these follow-on errors.
|
||
|
inc(x); // expected-error {{no match}}
|
||
|
dec(x); // expected-error {{no match}}
|
||
|
}
|
||
|
}
|