Skip to content
  • Douglas Gregor's avatar
    Introduce _Complex conversions into the function overloading · 78ca74d8
    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
    78ca74d8
Loading