Есть следующий фрагмент кода
Код: Выделить всё
#include
#include
#include
consteval auto copyVecToArray(){
std::vector vec{1,2,3,4,5,6,7};
std::array arr;
std::copy(std::begin(vec),std::end(vec),std::begin(arr));
return arr;
}
int main() {
constexpr auto value = copyVecToArray();
for(auto el : value){
std::cout 'vec.std::vector::size()'
> /opt/compiler-explorer/gcc-14.2.0/include/c++/14.2.0/bits/stl_vector.h:993:32:
> error: the value of 'vec' is not usable in a constant expression 993
> | { return size_type(this->_M_impl._M_finish -
> this->_M_impl._M_start); }
> | ~~~~~~^~~~~~~ :6:22: note: 'vec' was not declared 'constexpr'
> 6 | std::vector vec{1,2,3,4,5,6,7};
> | ^~~ :7:28: note: in template argument for type 'long unsigned int'
> 7 | std::array arr;
> | ~~~~~~~~^~ :8:55: error: no matching function for call to 'begin(int&)'
> 8 | std::copy(std::begin(vec),std::end(vec),std::begin(arr));
> |
Код: Выделить всё
#include
#include
#include
consteval auto getVec(){
std::vector vec{1,2,3,4,5,6,7};
return vec;
}
consteval auto getSize(){
return getVec().size();
}
consteval auto copyVecToArray(){
std::array arr;
auto vec = getVec();
std::copy(std::begin(vec),std::end(vec),std::begin(arr));
return arr;
}
int main() {
constexpr auto value = copyVecToArray();
for(auto el : value){
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79328691/c20-compile-time-retrieve-size-of-a-vector[/url]