https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122185

--- Comment #7 from Andrew Pinski <pinskia at gcc dot gnu.org> ---
(In reply to Sam James from comment #6)
> Right, started with r16-610-g3ecca8f3ad7e7f, but I guess latent then.

no that changed part of the folding here.

I think the reduced testcase is undefined.

Doing:
```
#include <utility>
template <typename T> struct static_const {
  static constexpr T value{};
};
template <typename, typename> struct adl_serializer;
template <template <typename, typename> class = adl_serializer>
class basic_json;
struct from_json_fn {
  template <typename BasicJsonType, typename T>
  void operator()(BasicJsonType, T) const;
};
template <typename, typename> struct adl_serializer {
  template <typename BasicJsonType, typename TargetType>
  static void from_json(BasicJsonType &&j, TargetType val) {
    static_const<from_json_fn>::value(std::forward<BasicJsonType>(j), val);
  }
};
struct iter_impl {
  basic_json<> operator*();
  void operator++();
  bool operator!=(iter_impl);
};
template <template <typename, typename = void> class JSONSerializer>
struct basic_json {
  template <typename> using iter_impl = iter_impl;
  using iterator = iter_impl<basic_json>;
  template <typename> void get_impl(int) {
    auto ret = int();
    JSONSerializer<int>::from_json(*this, ret);
  }
  template <typename> void get() { get_impl<int>({}); }
  iterator begin();
  iterator end();
  char type_name;
};
void _ValidateSignatureFile() {
  basic_json signatures;
  for (auto signature : signatures)
    signature.get<int>();
}
```

Works still. That is get the correct definition of std::forward from utility.


Do you have the original preprocessed source where the ICE happens?

Reply via email to