#include <type_traits>
template<typename T>
using Ref1 = T & ;
template<typename T>
using Ref2 = std::add_lvalue_reference_t<T>;
template<typename T>
void f1(Ref1<T>)
{}
template<typename T>
void f2(Ref2<T>)
{}
int main()
{
int n{};
f1(n); // ok
f2(n); // error
}
Мой компилятор - Clang 7.0, скомпилированный с c++17
.Сообщение об ошибке:
error : no matching function for call to 'f2'
note: candidate template ignored:
couldn't infer template argument 'T'
Почему f1
нормально, а f2
нет?