うーん、VC2012の奇妙なものです。テンプレート引数が非constポインターであるテンプレート化されたクラスの関数に、const参照によってconstポインターを渡すための構文を解決できないようです。
template<typename T>
struct Foo
{
void Add( const T& Bar ) { printf(Bar); }
};
void main()
{
Foo<char*> foo;
const char* name = "FooBar";
foo.Add(name); // Causes error
}
したがって、ここで問題を単純化しましたが、基本的には「追加」への引数に const T ie const char* を持たせたいと考えています。私はもう試した:
void Add( const (const T)& Bar );
typedef const T ConstT;
void Add( const (ConstT)& Bar );
void Add( const typename std::add_const<T>::type& Bar );
どれも機能しません。私が得ている正確なエラーは次のとおりです。
error C2664: 'Foo<T>::Add' : cannot convert parameter 1 from 'const char *' to 'char *const &'
with
[
T=char *
]
Conversion loses qualifiers
私が見ることができるのは正しいですが、constキャスト 'name'を非constにせずに解決するにはどうすればよいですか。