Douglas Gregor
authored
system. Since C99 doesn't have overloading and C++ doesn't have _Complex, there is no specification for this. Here's what I think makes sense. Complex conversions come in several flavors: - Complex promotions: a complex -> complex conversion where the underlying real-type conversion is a floating-point promotion. GCC seems to call this a promotion, EDG does something else. This is given "promotion" rank for determining the best viable function. - Complex conversions: a complex -> complex conversion that is not a complex promotion. This is given "conversion" rank for determining the best viable function. - Complex-real conversions: a real -> complex or complex -> real conversion. This is given "conversion" rank for determining the best viable function. These rules are the same for C99 (when using the "overloadable" attribute) and C++. However, there is one difference in the handling of floating-point promotions: in C99, float -> long double and double -> long double are considered promotions (so we give them "promotion" rank), while C++ considers these conversions ("conversion" rank). llvm-svn: 64343
Name | Last commit | Last update |
---|---|---|
.. | ||
Analysis | ||
CodeGen | ||
CodeGenCXX | ||
CodeGenObjC | ||
Coverage | ||
Driver | ||
Lexer | ||
Misc | ||
Parser | ||
Preprocessor | ||
Rewriter | ||
Sema | ||
SemaCXX | ||
SemaObjC | ||
SemaObjCXX | ||
SemaTemplate | ||
Serialization | ||
Makefile | ||
TestRunner.sh |