The following example is working when I manualy replace T wirh char *, but why is not working as it is:
template
If you make your constructor A(const char* _t), you're getting effectively A( (const char) *t). That is, a pointer to const char. But when you specify char* as the template parameter, you're getting effectively A( const (char *t)), or a const pointer to char.
In other words, I think you have the same problem discussed in the article A Midsummer Night's Madness, except with template parameters instead of typedefs.