bolt/deps/llvm-18.1.8/clang/test/SemaTemplate/equivalence.cpp

23 lines
958 B
C++
Raw Normal View History

2025-02-14 19:21:04 +01:00
// 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}}
}
}