Same AST for is_same<char, int>::value and is_same<char, long>::value

I seek some advice on the following AST scenario.

https://godbolt.org/z/WcTeoGcbG

1 #include <type_traits>

2 using std::is_same;

3 bool top() {

4 return is_same<char, int>::value || is_same<char, long>::value;

5 }

The alpha.core.IdenticalExpr static analyzer checker warns about that the two ..::value are identical DeclRefExprs.

According to the AST, they are indeed identical:

BinaryOperator <col:10, col:60> ‘bool’ ‘||’

-ImplicitCastExpr <col:10, col:30> ‘bool’:‘bool’

`-DeclRefExpr <col:10, col:30> ‘const bool’:‘const bool’ lvalue Var 0x563b67cde0a8 ‘value’ ‘const bool’:‘const bool’

`-ImplicitCastExpr <col:39, col:60> ‘bool’:‘bool’

`-DeclRefExpr <col:39, col:60> ‘const bool’:‘const bool’ lvalue Var 0x563b67cde0a8 ‘value’ ‘const bool’:‘const bool’

Both of them refers to the same VarDecl, corresponding (probably) to the std::false_type::value.

How can I detect that even though the values look similar, they correspond to different template instances in that sense?

What do you suggest?

In the end, I want to suppress these reports in the static analyzer.

Balázs