привет!
есть некоторый макрос, который генерит енумы и метаинфу для них.
все с макросом хорошо, за исключением того, что возникает проблема при использовании метафункционального кода.
пример:
#include <iostream>
namespace myns {
template<typename E>
E enum_cast(const char *, bool ok = true); // forward
enum class myenum0 { e0, e1 };
template<>
myenum0 enum_cast(const char *, bool) { return myenum0{}; }
} // ns myns
template<typename E>
E enum_cast(const char *, bool ok = true); // forward
enum class myenum1 { e0, e1 };
template<>
myenum1 enum_cast(const char *, bool) { return myenum1{}; }
int main(int, char **argv) {
myns::myenum0 e0 = enum_cast<myns::myenum0>(argv[0]); // тут, почему-то, ADL не работает
myenum1 e1 = enum_cast<myenum1>(argv[0]);
}
получим:
undefined reference to `myns::myenum0 enum_cast<myns::myenum0>(char const*, bool)'
макрос не знает неймспейса, в котором используется.
и ADL почему-то не срабатывает...
как победить?
спасибо.
пачка бумаги А4 стОит 2000 р, в ней 500 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)