C++ template 在传送模板参数时会进行隐式转换吗

C++ template 在传递模板参数时会进行隐式转换吗?
比如有这么一段代码:

#include <iostream>

using namespace std;

template <typename T>
class A
{
public:
typedef const T *pointer;
};

int main()
{
A<const int>::pointer x;
cout << typeid(x).name() << endl;
return 0;
}

当A中的模板参数显式指定为const int型时,输出x的实际类型是const int *,如果编译器只是将模板进行简单的替换的话,typedef const T *pointer应该会出错吧,所以我想知道编译器在背后到底做了些什么呢(比如会不会将const修饰符去掉之类的)?

------解决方案--------------------
看看C++11标准:
[C++11: 14.1/4]: A non-type template-parameter shall have one of the following (optionally cv-qualified) types:
•integral or enumeration type,
•pointer to object or pointer to function,
•lvalue reference to object or lvalue reference to function,
•pointer to member,
•std::nullptr_t.

[C++11: 14.1/5]: [ Note: Other types are disallowed either explicitly below or implicitly by the rules governing the form of template-arguments (14.3). —end note ] The top-level cv-qualifiers on the template-parameter are ignored when determining its type.(这里就说明了const修饰符会被忽略)

这个标准在C++03中同样存在
------解决方案--------------------
 你自己定义一个
typedef const int *pointer;
pointer Data;


const const int a;

两个例子来测试一下就知道了。
------解决方案--------------------
这和模板没关系,是关于 const qualifier 的规定,c++11 7.1.6.1/1
... Redundant cv-qualifications are ignored. [ Note: For example, these could be introduced by typedefs. — end note ]