Постироничные идеи для ебаного C++
321 subscribers
51 photos
1 video
2 files
20 links
Download Telegram
template<typename... Ts>
struct Enum: std::variant<Ts...> {
using std::variant<Ts...>::variant;
template<typename... Fs>
decltype(auto) match(this auto&& self, Fs&&... fs) {
struct Visitor: Fs... { using Fs::operator()...; };
return std::visit(Visitor{ std::forward<Fs>(fs)... }, self);
}
};

std::string foo(Enum<int, void*, long, double> e) {
return e.match(
[] (int i) { return std::format("Got int {}", i); },
[] (double d) { return std::format("Got double {}", d); },
[] (auto&&) { return std::string("Got something else"); }
);
}
🔥3
int arr[4];
arr[
[] { return 0; } ()
] = 1;
int arr[1];
[](){return 0;}()[arr] = 1;
это компилируется
🥴1
Forwarded from greg
int _[1]{};
++[&_](){return _[([](){return 0;}())];}()[_];
template <ObjectLike O, ClassLike C, typename... Args>
[[nodiscard]] util::Ptr<O> UnsafeNew(util::Ptr<C> object_class, Args&&... args) {
if constexpr (std::is_same_v<O, Struct>) {
auto new_object = util::MakePtr<Struct>(object_class);
auto it = util::As<StructClass>(object_class)->GetFields().begin();
(
[&it, &args, &new_object] {
auto class_ = *it++;
if (util::Is<StructClass>(class_)) {
new_object->AddFieldValue(
UnsafeNew<Struct>(util::As<StructClass>(class_), args));
} else if (util::Is<StringClass>(class_)) {
if constexpr (std::is_convertible_v<decltype(args), std::string_view>) {
new_object->AddFieldValue(
UnsafeNew<String>(util::As<StringClass>(class_), args));
}
} else {
if constexpr (!std::is_convertible_v<std::remove_reference_t<decltype(args)>,
std::string_view>) {
#define DDB_ADD_PRIMITIVE(P) \
else if (util::Is<PrimitiveClass<P>>(class_)) { \
new_object->AddFieldValue( \
UnsafeNew<Primitive<P>>(util::As<PrimitiveClass<P>>(class_), args)); \
}

if (false) {
}
DDB_PRIMITIVE_GENERATOR(DDB_ADD_PRIMITIVE)
#undef DDB_ADD_PRIMITIVE
}
}
}(),
...);
return new_object;
} else if constexpr (std::is_same_v<O, String>) {
return util::MakePtr<String>(object_class, std::move(std::get<0>(std::tuple(args...))));
} else {
return util::MakePtr<O>(object_class, std::get<0>(std::tuple(args...)));
}
throw error::TypeError("Can't create object");
}
🥱5🤔1
Forwarded from Maxim
Почему-то этот кусок кода выдает ошибку
In template: no matching function for call to 'construct_at' error occurred here in instantiation of function template specialization 'std::_Construct<BrickWall, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const float &>' requested here in instantiation of function template specialization 'std::allocator_traits<std::allocator<void>>::construct<BrickWall, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, c... in instantiation of function template specialization 'std::_Sp_counted_ptr_inplace<BrickWall, std::allocator<void>, __gnu_cxx::_S_atomic>::_Sp_counted_ptr_inplace<BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const... in instantiation of function template specialization 'std::__shared_count<__gnu_cxx::_S_atomic>::__shared_count<BrickWall, std::allocator<void>, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float... in instantiation of function template specialization 'std::__shared_ptr<BrickWall, __gnu_cxx::_S_atomic>::__shared_ptr<std::allocator<void>, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, gl... in instantiation of function template specialization 'std::shared_ptr<BrickWall>::shared_ptr<std::allocator<void>, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const ... in instantiation of function template specialization 'std::make_shared<BrickWall, BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const float &>' requested here candidate template ignored: substitution failure [with _Tp = BrickWall, _Args = <BrickWall::WallType, const glm::vec<2, float, glm::packed_highp> &, const glm::vec<2, float, glm::packed_highp> &, const float &>]: allocating an object of...

return std::make_shared<BrickWall>(BrickWall::WallType::Right, position, scale, rotation);

BrickWall(const WallType wallType, const glm::vec2 &position, const glm::vec2 &scale, const float rotation);
Какой вариант корректно удалит все элементы из STL map

// a
for(auto i = map.begin(); i != map.end(); ++i) {
map.erase(i);
}

// b
for(auto i = map.begin(); i != map.end(); i++) {
map.erase(i);
}

// c
for(auto i = map.begin(); i != map.end(); ) {
map.erase(++i);
}

// d
for(auto i = map.begin(); i != map.end(); ) {
map.erase(i++);
}
greg
Photo
Спасибо студентам курса Алгоритмы и Структуры данных Весна 2024 ПИиКТ ИТМО за контент в паблик.
Forwarded from Stepan
std::iota::poebota::rangers::ranges
🔥9
помогите пофиксить
malloc(std::chrno::milliseconds(200).detach());
😁42