string s; bool b[] = {s=="", s==s.c_str(), s.c_str()==""}; наборы b[] = {true, true, false}; почему b[2]ложно? Если A==Bи не A==Cдолжно ли это подразумевать
string s; bool b[] = {s=="", s==s.c_str(), s.c_str()==""}; наборы b[] = {true, true, false}; почему b[2]ложно? Если A==Bи не A==Cдолжно ли это подразумевать
Следующий бессмысленный пример не компилируется, но есть ли другой способ передать шаблон переменной в качестве аргумента шаблона шаблона? template<typename T> constexpr auto zero = T{0}; template<typename T, template<typename> auto VariableTemplate> constexpr auto add_one() {...
Перегруженная функция должна принимать оба функтора, учитывая, что тип лямбды можно разрешить (можно преобразовать в std::function(пожалуйста, исправьте меня, если я ошибаюсь). Вопрос в том, почему ниже приведена ошибка компиляции, несмотря на то, что лямбда-тип явно определен? ( [&]() ->...
Хорошо ли следующее (надуманный пример) или это неопределенное поведение: // undefined behavior? const auto& c = SomeClass{}; // use c in code later const auto& v =
Следующее не компилируется: #include <iostream> int main() { int a{},b{},c{},d{}; for (auto& s : {a, b, c, d}) { s = 1; } std::cout << a << std::endl; return 0; } Попробуй это на Годболте Ошибка компилятора: error: assignment of read-only reference 's' Теперь в моем реальном...
Есть идеи, почему следующий фрагмент не компилируется? Он жалуется с ошибкой «ошибка: операнды к?: Есть разные типы» auto lambda1 = [&](T& arg) { ... }; auto lambda2 = [&](T& arg) { ... }; auto lambda = condition ? lambda1 :...
int a = 5; const int b = a, c = 4; int e[a]; int d[b]; int f[c]; Определение f[c]является действительным. Переменная bтакже является константой int, но компилятор выдал ошибку «выражение должно иметь постоянное значение» для строки int d[b]. Каковы различия между bи...
Все конструкторы std :: span объявлены constexpr, однако я не могу заставить их работать в контексте constexpr. Раскомментирование любого из constexpr ниже приведет к ошибке компиляции. #include <array> #include <span> int main() { constexpr int carray[3] = { 0, 1, 2 }; constexpr...
Предположим, у меня есть вызываемый тип, например: struct mutable_callable { int my_mutable = 0; int operator()() { // Not const return my_mutable++; } }; Обратите внимание, что mutable_callableесть неконстантный, operator()который изменяет переменную-член ..... Теперь предположим, что я создал...
Мой сценарий следующий (он работал в Clang, но не в GCC) liba.hpp: inline int MY_GLOBAL = 0; libother.cpp: (dll) #include "myliba.hpp" void myFunc() { // MYGLOBAL = 28; } someexe.cpp: RunAppThatUsesBothLibAandLibOther(); Проблема в том, что встроенная переменная показывала 0 в тех местах, где я...
Когда у меня есть цикл, и внутри этого цикла создается новая переменная стека (без выделения ее в куче и переменной, содержащей ее, объявленной внутри тела цикла), гарантированно вызывается деструктор этого объекта перед началом следующей итерации, или может Развертывание цикла компилятором что-то...
Рассмотрим этот пример ( отсюда ): #include <type_traits> #include <iostream> template <typename U> struct A { }; struct B { template <typename F = int> A<F> f() { return A<F>{}; } using default_return_type = decltype(std::declval<B>().f()); }; int main() {...
Недавно у меня было следующее struct data { std::vector<int> V; }; data get_vector(int n) { std::vector<int> V(n,0); return {V}; } Проблема с этим кодом заключается в том, что при создании структуры происходит копирование, и вместо этого нужно написать return return {std :: move (V)}...
При звонке std::sort()на std::array: #include <vector> #include <array> #include <algorithm> int main() { std::vector<int> foo{4, 1, 2, 3}; sort(begin(foo), end(foo)); std::array<int, 4> foo2{4, 1, 2, 3}; sort(begin(foo2), end(foo2)); } И gcc, и clang возвращают ошибку...
Я знаю о сгенерированных компилятором функциях, правило трех и правило пяти. В реальных сценариях может оказаться нетривиальным выяснить, какие именно функции, сгенерированные компилятором (конструкторы, операторы присваивания, деструктор) были фактически созданы компилятором. Есть ли способ...
Взято из GCC реализации, type_traitsзачем static_castздесь нужно? template <typename _Tp, typename... _Args> struct __is_nt_constructible_impl : public integral_constant<bool, noexcept(_Tp(declval<_Args>()...))> {}; template <typename _Tp, typename _Arg> struct...
Является ли следующий код законным? template <int N> class foo { public: constexpr foo() { for (int i = 0; i < N; ++i) { v_[i] = i; } } private: int v_[N]; }; constexpr foo<5> bar; Clang принимает это, но GCC и MSVC отклоняют это. Ошибка GCC: main.cpp:15:18: error: 'constexpr...
Ограничение времени на тест: 5 секунд Ограничение памяти на тест: 512 мегабайт Вам дана строка sдлины n( n≤ 5000). Вы можете выбрать любой правильный префикс этой строки, который также является ее суффиксом, и удалить либо выбранный префикс, либо соответствующий суффикс. Затем вы можете применить...
Чтобы получить функцию void *из CI, нужно сделать что-то вроде этого (очень простой пример): void *get_ptr(size_t size) { void *ptr = malloc(size); return ptr; } Как добиться того же результата при использовании...
Следующий вопрос связан, однако ответы на старые, и комментарий от пользователя Marc Glisse предполагает , что есть новые подходы , начиная с C ++ 17 к решению этой проблемы , которые не могут быть адекватно обсуждены. Я пытаюсь выровнять память, работающую правильно для SIMD, при этом все еще имея...