Reputation: 4473
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
Upvotes: 2
Views: 300
Reputation: 573
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)
Upvotes: 4