Аргумент шаблона по умолчанию теряет свой ссылочный тип

Рассмотрим

#include <iostream>
#include <type_traits>

template <class T, class ARG_T = T&>
T foo(ARG_T v){
    return std::is_reference<decltype(v)>::value;
}

int main() {
    int a = 1;
    std::cout << foo<int>(a) << '\n';
    std::cout << foo<int, int&>(a) << '\n';
}

Я ожидаю, что результат будет 1 в обоих случаях. Но в первом случае это 0: соответствует значению по умолчанию class ARG_T = T, а не class ARG_T = T&.

Чего мне не хватает?

43
задан songyuanyao 6 September 2019 в 15:36
поделиться