0

私はテンプレートを扱っています、それはとても簡単です。これが現在の構造です。

//primary template
template<typename T> 
const T bit_cast(const BitExpr* p);    

//specialization
template<> 
inline const BitBinExpr* bit_cast<BitBinExpr*>(const BitExpr* p) {
    if (p->type == XOR || p->type == AND)
        return static_cast<const BitBinExpr*>(p);
    return nullptr;
}
// more specializations follow

しかし、Visual Studioは、これは無効であると主張しています。ただし、パラメーターと戻り値のタイプがそうでない const場合、これは問題なく機能しました。VSにこのコードを受け入れるように説得するにはどうすればよいですか?

4

1 に答える 1

2

これは最近かなり発生しているようです。これらの2つのタイプは同じではありません

const BitBinExpr* // BitBinExpr is constant

typedef BitBinExpr* T;
const T           // pointer is constant

多分これはあなたが探しているものです

template<typename T> const T bit_cast(const BitExpr* p);    
template<> inline const BitBinExpr *const bit_cast<const BitBinExpr *const>(const BitExpr* p) {
    if (p->type == XOR || p->type == AND)
        return static_cast<const BitBinExpr*>(p);
    return nullptr;
}
于 2012-08-05T06:11:01.640 に答える