compile-time polymorphism