下プリミティブ型の過負荷のために働いていません私はまた、次のものを持っていますAddOperator
もベースから継承する式のテンプレートは次のように私は<a href="https://en.wikipedia.org/wiki/Curiously_recurring_template_pattern" rel="nofollow">CRTP</a>基本クラスを持って打ち鳴らす
template<typename TLhs, typename TRhs, size_t DIMS>
struct AddOperator: public Base<AddOperator<TLhs, TRhs, DIMS>,DIMS> {
AddOperator(const TLhs& lhs, const TRhs& rhs) : lhs(lhs), rhs(rhs) {
print(rhs);
}
const TLhs &lhs;
const TRhs &rhs;
};
その後Derived
タイプとプリミティブ型を返す種類の唯一のプロキシ/発現との間にoperator+
オーバーロード:私はclang
の下でこれを呼び出すとき
template<typename TLhs, typename TRhs, size_t DIM0,
typename std::enable_if<!std::is_arithmetic<TLhs>::value &&
std::is_arithmetic<TRhs>::value,bool>::type = 0 >
inline AddOperator<TLhs, TRhs, DIM0>
operator+(const Base<TLhs,DIM0> &lhs, TRhs rhs) {
return AddOperator<TLhs, TRhs, DIM0>(lhs.self(), rhs);
}
は、しかし、私はAddOperator
のrhs
のためのごみ値を取得します。次に例を示します。
int main() {
Derived<double,2,2> g;
Derived<double,2,2> x = g+28;
return 0;
}
他のオーバーロードAddOperator
の両方のlhs
とrhs
は、この問題を持っていないタイプDerived
であるとき。
この問題はclang
の下でのみ発生します。 gcc
コンパイルされたコードが正常に動作しているようです。誰が問題がどこにあるか知っていますか?
私は質問を投稿するとすぐに自分自身に気付きました。ありがとう –