Почему шаблоная функция same возвращает true при разных типах?
#include <iostream>
template <typename T, typename U>
struct is_same{
const static bool value = false;
};
template <typename T>
struct is_same<T, T>{
const static bool value = true;
};
template<typename T, typename U>
bool same(T, U){
return is_same<T, U>::value;
}
int main(){
const int x = 0;
int y;
std::cout << is_same<const int, int>::value << '\n'; // false
std::cout << same(x, y) << '\n'; // true
}
Почему same возвращает true если типы x - const int а y - int? Что нужно сделать, что-бы same возвращал false как и is_same?
Источник: Stack Overflow на русском