forward и специализация шаблонной функции
От: niXman Ниоткуда https://github.com/niXman
Дата: 07.11.17 08:12
Оценка:
привет!

есть некоторый макрос, который генерит енумы и метаинфу для них.
все с макросом хорошо, за исключением того, что возникает проблема при использовании метафункционального кода.
пример:
#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 листов. получается, лист обычной бумаги стОит дороже имперского рубля =)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.