// { dg-additional-options "-fmodules-ts -std=c++20" }

import M;

struct Variant0
{
};


struct Variant2
{
  using element_type = double;
};

struct Variant3
{
  using value_type = float;
};

void f()
{
  using v0 = traits<Variant0>;
  using v1 = traits<Variant0 *>;
  using v2 = traits<Variant2 *>;
  using v3 = traits<Variant3 *>;

  static_assert (v0::variant == 0);
  static_assert (v1::variant == 1);
  static_assert (v2::variant == 2);
  static_assert (v3::variant == 3);
}