[libcxx-commits] [PATCH] D96523: [libc++] Rewrite the tuple constructors to be strictly Standards conforming

Jordan Rupprecht via Phabricator via libcxx-commits libcxx-commits at lists.llvm.org
Fri Apr 30 16:44:47 PDT 2021


rupprecht added a comment.

In D96523#2730264 <https://reviews.llvm.org/D96523#2730264>, @ldionne wrote:

> This should fix the instantiation depth issue: https://reviews.llvm.org/D101661
>
> @rupprecht Please ping me once you've reduced to something that doesn't involve Gmock and I'll look into it.



  #include <any>
  #include <tuple>
  
  template <typename a>
  class b {
    b(a);
  };
  
  template <typename>
  struct c;
  template <typename m, typename... d>
  struct c<m(d...)> {
    using e = std::tuple<b<d>...>;
  };
  
  template <typename>
  class f;
  
  template <typename g>
  class h {
    typename c<g>::e i;
  };
  
  template <typename m, typename... d>
  struct f<m(d...)> {
    h<m(d...)> n();
  };
  
  class j {
    void k() { l.n(); }
    // Note: D96523 breaks this:
    f<void(std::any, int)> l;
    // Note: D96523 fixes this:
    // f<void(std::any)> l;
  };

https://www.godbolt.org/z/4W8b1G7Yd


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96523/new/

https://reviews.llvm.org/D96523



More information about the libcxx-commits mailing list