-XBT_PUBLIC void declareFlag(const char* name, const char* description, T value,
- std::function<void(const T&)> callback = std::function<void(const T&)>());
-
-extern template XBT_PUBLIC void declareFlag(const char* name, const char* description, int value,
- std::function<void(int const&)> callback);
-extern template XBT_PUBLIC void declareFlag(const char* name, const char* description, double value,
- std::function<void(double const&)> callback);
-extern template XBT_PUBLIC void declareFlag(const char* name, const char* description, bool value,
- std::function<void(bool const&)> callback);
-extern template XBT_PUBLIC void declareFlag(const char* name, const char* description, std::string value,
- std::function<void(std::string const&)> callback);
-
-// ***** alias *****
-
-XBT_PUBLIC void alias(const char* realname, const char* aliasname);
-
-inline
-void alias(std::initializer_list<const char*> names)
+XBT_PUBLIC void declare_flag(const std::string& name, const std::string& description, T value,
+ std::function<void(const T&)> callback = nullptr);
+template <class T>
+void declare_flag(const std::string& name, std::initializer_list<const char*> aliases, const std::string& description,
+ T value, std::function<void(const T&)> callback = nullptr)