[llvm-dev] BinaryOperator vs. CXXOperatorCallExpr in template code

Stephan Bergmann via llvm-dev llvm-dev at lists.llvm.org
Fri Jun 4 00:54:25 PDT 2021

Ever since 
"Improve the representation of operator expressions like "x + y" within 
C++ templates", the documentation of BinaryOperator 
(clang/include/clang/AST/Expr.h) and CXXOperatorCallExpr 
(clang/include/clang/AST/ExprCXX.h) claim that if any of an operator's 
arguments are type-dependent, it is represented with 
CXXOperatorCallExpr.  However,

> template<typename T> void f(T x) {
>     int n;
>     x + n;
>     x += n;
> }
> #pragma clang __debug dump f

shows both + and += to use BinaryOperator (derived 
CompoundAssignOperator for +=).

Anything I'm missing?

More information about the llvm-dev mailing list