heuristics to determine when it's useful to desugar a type for display
to the user. Introduce two C++-specific heuristics:
- For a qualified type (like "foo::bar"), only produce a new
desugred type if desugaring the qualified type ("bar", in this
case) produces something interesting. For example, if "foo::bar"
refers to a class named "bar", don't desugar. However, if
"foo::bar" refers to a typedef of something else, desugar to that
something else. This gives some useful desugaring such as
"foo::bar (aka 'int')".
- Don't desugar class template specialization types like
"basic_string<char>" down to their underlying "class
basic_string<char, char_traits<char>, allocator<char>>, etc.";
it's better just to leave such types alone.
Update diagnostics.html with some discussion and examples of type
preservation in C++, showing qualified names and class template
specialization types.
llvm-svn: 68207
17 lines
327 B
C++
17 lines
327 B
C++
// RUN: clang-cc -fsyntax-only -verify %s
|
|
|
|
namespace std {
|
|
template<typename T> class vector { };
|
|
}
|
|
|
|
typedef int INT;
|
|
typedef float Real;
|
|
|
|
void test() {
|
|
using namespace std;
|
|
|
|
std::vector<INT> v1;
|
|
vector<Real> v2;
|
|
v1 = v2; // expected-error{{incompatible type assigning 'vector<Real>', expected 'std::vector<INT>'}}
|
|
}
|