#include <iostream>
#include <type_traits>
using namespace std;

template<typename T>
void foo2(T&& val)
{
    static_assert(std::is_same<int* const, T>::value, "not the same");
}

template<typename T>
void foo(T& val)
{
    foo2(const_cast<T const>(val));
}

int main() {
	int* bar;
    foo(bar);
	return 0;
}