Посмотрите на следующий тестовый код:
template<class T> struct Wrap {};
template<typename T> inline
void fun (T *&Int) // **choice 1**
{}
template<typename T> inline
void fun (Wrap<T> *&Int) // **choice 2**
{}
int main()
{
int i = 6;
fun((char*&)(i)); // **call 1**
fun((Wrap<char>*&)(i)); // **call 2**
}
Когда я запускаю этот код в linux g ++, он работает, как и ожидалось. Когда fun () вызывается с помощью char * &, он вызывает функцию выбора 1 напрямую.
Однако меня интересует, когда мы вызываем fun () с помощью Wrap
Вопрос : Гарантируется ли, что такое же поведение будет сохранено для любого другого компилятора для C ++? Если нет, то есть ли другая альтернатива, чтобы сделать его детерминированным?