So I have some code like
void func( const int* begin, const int* end );
and then want to use std::array<int, X> to have the data stored, and then call the function like so:
std::array<int, 5> data = {1,2,3,4,5};
func( data.begin(), data.end() );
When using clang, the iterator apparently is implicitly convertible to const int* and everything works as expected.
However on MSVC I'm getting a compiler error
C2664 cannot convert argument 1 from `std::_Array_const_iterator<_Ty,5>` to `const int*`
Is there a way to coerce the type conversion that I'm somehow missing? Or will I have to do data.data()[0] or something lame like that?
Changing the function signature is not really an option
CodePudding user response:
The iterator for std::array<int> doesn't necessarily have to be int*, it's just std::array<int>::iterator, which is up to the individual compiler implementation to decide what it should be.
the standard library provides a function to reliably convert iterators into raw pointers:
std::addressof(*iterator)
Although this can also work:
&(*iterator)
