次のプログラムを試しました
#include <iostream>
#include <valarray>
int main( void )
{
std::valarray<int> v1 = { 1, 2, 3, 4, 5 };
std::valarray<int> v2 = { 1, 2, 3, 4, 5 };
auto v3 = v1 * v2;
for ( const auto &item : v3 ) std::cout << item << ' ';
std::cout << '\n';
return 0;
}
適切な関数がこのステートメントで暗黙的に使用されbegin
ているというエラーメッセージを受け取りましたv3
for ( const auto &item : v3 ) std::cout << item << ' ';
見つからない。
だから私は次のコードを試しました
#include <iostream>
#include <valarray>
#include <type_traits>
int main( void )
{
std::valarray<int> v1 = { 1, 2, 3, 4, 5 };
std::valarray<int> v2 = { 1, 2, 3, 4, 5 };
auto v3 = v1 * v2;
std::cout << std::is_same<std::valarray<int>, decltype( v3 )>::value << '\n';
return 0;
}
そして結果を得た
0
しかし、この発言のとき
auto v3 = v1 * v2;
に変更されます
std::valarray<int> v3 = v1 * v2;
出力は
1
operator *
forstd::valarray<int>
は次のように宣言されます
template<class T> valarray<T> operator* (const valarray<T>&, const valarray<T>&);
の実装のバグstd::valarray<int>
ですか?