в IDE подсвечвает.
Можно что-то с этим сделать, чтоб не писал ошибки?
Подчеркивает constexpr в main
//Error(active) E0029 expected an expression
class ClassA
{
public:
constexpr ClassA() {}
};
void Foo(ClassA a) {}
int main()
{
Foo(constexpr ClassA());
return 0;
};
очередное доказательство что мсвц не компилятор это некорректный код который не должен собираться
Подсвечивает IntelliSense? Если он, то можно обратную связь на их сайте оставить
Мне даже интересно, а во что мсвц это собирает)) constexpr просто игнорируется в итоге 🤔
Не знаю во что, но это работает. Возможно создаётся static переменная 🫤, Но у нас это используется с 20го года.
что это вообще должно было значить?
Это чтобы создать структуру { len, data[] } во времени компиляции, зная длину массива и передавая указатель на поле data COM IMalloc::Alloc и т.п.
синтаксис вызова функции не предуcматривает constexpr
Не полное описание, обрывки, но думаю понятно int[3] inStatic = {0,1,2}; constexpr MyStruct var(inStatic); Method(constexpr MyStruct(inStatic)); <template A, size N class MyStruct { size_t size; A[] data; public: constexpr MyStruct(A[N]) : MyStruct(sizeof(A)* N....) { //... } }
clang прямым текстом говорит function parameter cannot be constexpr
Верю, но у нас завязано на ms
Весь преподавательский состав плакал, читал этот код с бумажки.
Мне интересно, что тут constexpr должен был по задумке делать
Это с++? Я смог достать и немного сократить) template<std::size_t N> class ClassA { public: constexpr ClassA(const int(&arr)[N]): ClassA(arr, std::make_index_sequence<N>{}){} operator p_int() const noexcept { return const_cast<p_int>(_data); } private: std::size_t _size; int _data[N]; template<std::size_t... Is> constexpr ClassA(const int(&arr)[N], std::index_sequence<Is...>) : _size(sizeof(int) * (N - 1)), _data{ arr[Is]... } {} }; constexpr int myArry[4] = { 10, 20, 30, 40}; void Foo(int* a) {} int main() { //Foo(constexpr ClassA(o__tmp)); { const constexpr ClassA o__tmp(myArry); Foo(o__tmp); } return 0; };
это выглядит более валидно
Обсуждают сегодня