コンパイルして実行するプログラム(トリミング)がありますが、コードウィンドウでは、アスタリスク(演算子*)の下に赤い波線があり、マウスオーバーキャプションに「エラー、演算子なし*」と表示されます。これらのオペランドに一致します。波線はコンパイラーに伝えるのを怠ったと思います。operator*を"dot"という名前の関数に変更しても同じことが起こります。
ジャンプするのに十分なフープがない場合は、MSに報告したいと思います。しかし、最初に、コンパイラと私が間違っているかどうか、そして波線が正しいかどうかを教えてください。
#include <vector>
#include <iostream>
//#include "fp_vectors.h"
// Header file =================
#include <type_traits>
#include <algorithm>
namespace dj {
// Dot-product of two real-valued vectors
template <typename FirstType, typename SecondType>
auto operator*(const FirstType &a, const SecondType &b) -> decltype(a[0]*b[0]){
std::remove_const<decltype(a[0]*b[0])>::type ret = 0.0;
const int sz = std::min(a.size(),b.size());
for(int i=0;i<sz;++i) {
ret += a[i]*b[i];
}
return ret;
}
} // namespace dj
// End header file ================
using namespace std;
typedef vector<float> fvec;
typedef vector<double> dvec;
using namespace dj;
int main()
{
const size_t sz = 3;
fvec fv(sz);
dvec dv(sz);
for(size_t i=0; i<sz; ++i) {
fv[i] = -.89f*(i-1.0f);
dv[i] = 1.6*(i-2.2);
}
double ret = dv*fv; // Earns a red squiggly
cout << ret << endl;
return 0;
}