#include namespace clanguml { namespace t20004 { template T m4(T p); template <> [[maybe_unused]] int m4(int p) { return p + 2; } template <> [[maybe_unused]] unsigned long m4(unsigned long p) { return 1000 * p; } template T m3(T p) { return m4(p); } template T m2(T p) { return m3(p); } template <> [[maybe_unused]] std::string m2(std::string p) { return std::string{"m2"} + p; } template T m1(T p) { return m2(p); } template <> [[maybe_unused]] float m1(float p) { return 2 * p; } template <> [[maybe_unused]] unsigned long m1(unsigned long p) { return m4(p); } template <> [[maybe_unused]] std::string m1(std::string p) { return m2(p); } int main() { m1(2.2); m1(100); m1("main"); return m1(0); } } }