Skip to content
Snippets Groups Projects
  1. Mar 16, 2017
  2. Feb 22, 2017
  3. Feb 16, 2017
  4. Feb 14, 2017
  5. Feb 09, 2017
  6. Jan 13, 2017
  7. Dec 31, 2016
    • Richard Smith's avatar
      [c++17] Implement P0522R0 as written. This allows a template template argument · 2faed1c4
      Richard Smith authored
      to be specified for a template template parameter whenever the parameter is at
      least as specialized as the argument (when there's an obvious and correct
      mapping from uses of the parameter to uses of the argument). For example, a
      template with more parameters can be passed to a template template parameter
      with fewer, if those trailing parameters have default arguments.
      
      This is disabled by default, despite being a DR resolution, as it's fairly
      broken in its current state: there are no partial ordering rules to cope with
      template template parameters that have different parameter lists, meaning that
      code that attempts to decompose template-ids based on arity can hit unavoidable
      ambiguity issues.
      
      The diagnostics produced on a non-matching argument are also pretty bad right
      now, but I aim to improve them in a subsequent commit.
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@290792 91177308-0d34-0410-b5e6-96231b3b80d8
      2faed1c4
  8. Dec 19, 2016
  9. Dec 14, 2016
  10. Dec 08, 2016
    • Richard Smith's avatar
      [c++1z] P0003R5: Removing dynamic exception specifications. · 1f0155f2
      Richard Smith authored
      We continue to support dynamic exception specifications in C++1z as an
      extension, but produce an error-by-default warning when we encounter one. This
      allows users to opt back into the feature with a warning flag, and implicitly
      opts system headers back into the feature should they happen to use it.
      
      There is one semantic change implied by P0003R5 but not implemented here:
      violating a throw() exception specification should now call std::terminate
      directly instead of calling std::unexpected(), but since P0003R5 also removes
      std::unexpected() and std::set_unexpected, and the default unexpected handler
      calls std::terminate(), a conforming C++1z program cannot tell that we are
      still calling it. The upside of this strategy is perfect backwards
      compatibility; the downside is that we don't get the more efficient 'noexcept'
      codegen for 'throw()'.
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@289019 91177308-0d34-0410-b5e6-96231b3b80d8
      1f0155f2
  11. Dec 07, 2016
  12. Dec 01, 2016
  13. Nov 12, 2016
  14. Nov 11, 2016
  15. Nov 01, 2016
  16. Oct 26, 2016
  17. Oct 22, 2016
  18. Oct 10, 2016
  19. Sep 29, 2016
  20. Sep 28, 2016
  21. Aug 15, 2016
  22. Jul 14, 2016
  23. Jun 28, 2016
    • Richard Smith's avatar
    • Richard Smith's avatar
      cxx_status: fix footnote for p0136. · 430507b7
      Richard Smith authored
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274059 91177308-0d34-0410-b5e6-96231b3b80d8
      430507b7
    • Richard Smith's avatar
      P0136R1, DR1573, DR1645, DR1715, DR1736, DR1903, DR1941, DR1959, DR1991: · 5be817d9
      Richard Smith authored
      Replace inheriting constructors implementation with new approach, voted into
      C++ last year as a DR against C++11.
      
      Instead of synthesizing a set of derived class constructors for each inherited
      base class constructor, we make the constructors of the base class visible to
      constructor lookup in the derived class, using the normal rules for
      using-declarations.
      
      For constructors, UsingShadowDecl now has a ConstructorUsingShadowDecl derived
      class that tracks the requisite additional information. We create shadow
      constructors (not found by name lookup) in the derived class to model the
      actual initialization, and have a new expression node,
      CXXInheritedCtorInitExpr, to model the initialization of a base class from such
      a constructor. (This initialization is special because it performs real perfect
      forwarding of arguments.)
      
      In cases where argument forwarding is not possible (for inalloca calls,
      variadic calls, and calls with callee parameter cleanup), the shadow inheriting
      constructor is not emitted and instead we directly emit the initialization code
      into the caller of the inherited constructor.
      
      Note that this new model is not perfectly compatible with the old model in some
      corner cases. In particular:
       * if B inherits a private constructor from A, and C uses that constructor to
         construct a B, then we previously required that A befriends B and B
         befriends C, but the new rules require A to befriend C directly, and
       * if a derived class has its own constructors (and so its implicit default
         constructor is suppressed), it may still inherit a default constructor from
         a base class
      
      
      git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@274049 91177308-0d34-0410-b5e6-96231b3b80d8
      5be817d9
  24. Jun 25, 2016
  25. Jun 24, 2016
Loading