4

次のプログラムを試しました

#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>ですか?

4

1 に答える 1