```
template <typename T>
concept HasMagma = requires(T l) { l.magma(); };

struct LavaMan {
void magma() { std::cout << " LavaMan is throwing LAVA" << std::endl; }
};

struct FakeVulcano {
void try_making_lava() { std::cout << " Making fake lava" << std::endl; }
};

void make_lava(HasMagma auto& lava) {
    lava.magma();
}

void make_lava(auto& lava_thing){
    lava_thing.try_making_lava();
}

int main() {
  LavaMan v;
  FakeVulcano l;
  make_lava(l);
  make_lava(v);
  return 0;
}
```

results in:
```
 Making fake lava
 LavaMan is throwing LAVA
```

Is there something equivalent in dlang, doesn't seem like d support specialized overload?

Reply via email to