Я попробовал следующую программу
#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 *
для std::valarray<int>
объявлен следующим образом
template<class T> valarray<T> operator* (const valarray<T>&, const valarray<T>&);
Так что этоошибка реализации std::valarray<int>
?