K
int main()
{
std::vector<std::atomic_int> numbers(5);
for(int i = 0; i < 5; ++i)
std::atomic_init(&numbers[i], i);
return 0;
}
Dieses Programm liefert keine Fehlermeldung im Gegensatz zu
int main()
{
std::vector<std::atomic<int>> numbers(5);
for(int i = 0; i < 5; ++i)
std::atomic_init(&numbers[i], i);
}
Kann sein, dass der seperate Typ mehr bietet als std::atomic<int>, obwohl es nur ein typdef sein sollte. Ich bin der Sache aber nicht nachgegangen. Komplette Fehlermeldung:
1>C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility(2466): error C2248: 'std::atomic<int>::operator =' : cannot access private member declared in class 'std::atomic<int>'
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xxatomic(279) : see declaration of 'std::atomic<int>::operator ='
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xxatomic(254) : see declaration of 'std::atomic<int>'
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\xutility(2487) : see reference to function template instantiation '_OutIt std::_Move<_InIt,_OutIt>(_InIt,_InIt,_OutIt,std::_Nonscalar_ptr_iterator_tag)' being compiled
1> with
1> [
1> _OutIt=std::atomic<int> *,
1> _InIt=std::atomic<int> *
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector(1402) : see reference to function template instantiation '_OutIt std::_Move<std::atomic<int>*,std::atomic<int>*>(_InIt,_InIt,_OutIt)' being compiled
1> with
1> [
1> _OutIt=std::atomic<int> *,
1> _InIt=std::atomic<int> *
1> ]
1> C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\vector(1381) : while compiling class template member function 'std::_Vector_iterator<_Myvec> std::vector<_Ty>::erase(std::_Vector_const_iterator<_Myvec>,std::_Vector_const_iterator<_Myvec>)'
1> with
1> [
1> _Myvec=std::_Vector_val<std::_Simple_types<std::atomic<int>>>,
1> _Ty=std::atomic<int>
1> ]
1> test move.cpp(13) : see reference to class template instantiation 'std::vector<_Ty>' being compiled
1> with
1> [
1> _Ty=std::atomic<int>
1> ]