Постироничные идеи для ебаного C++ – Telegram
Постироничные идеи для ебаного C++
322 subscribers
51 photos
1 video
2 files
20 links
Download Telegram

template <class T, class E>
struct Result : public Either<T, E> {

template <class V>
Result(V&& v) : Either<T, E>(std::forward<V>(v)) {
}
template <class V>
Result(const V& v) : Either<T, E>(v) {
}

auto Ok() const noexcept -> bool {
return this->template Is<T>();
}

auto Unwrap() -> T& {
try {
return this->template As<T>();
} catch (...) {
throw this->template As<E>();
}
}

auto Err() -> E {
return this->template As<E>();
}

auto operator!() -> T& {
return Unwrap();
}
};


auto Res() -> monad::Result<monad::Unit, err::RuntimeError> {
return err::RuntimeError("LOL");
}

auto Throws() -> void {
!Res();
}
🔥4
#include <string>
#include <fmt/format.h>

template<typename F>
struct Scope_exit {
F f;
Scope_exit(F f): f(std::move(f)) {}
~Scope_exit() { f(); }
};

auto make_string() {
std::string result;

Scope_exit guard = [&] {
fmt::println("About to return '{}'", result);
};

for (int i = 0; i < 20; i++) {
result += std::to_string(i);
}

return result;
}

int main() {
auto s = make_string();
}


$ # Either behavior is legal of a C++ compiler
$ g++ a.cpp -lfmt -o a && ./a
About to return '012345678910111213141516171819'
$ g++ a.cpp -lfmt -o a -fno-elide-constructors && ./a
About to return ''
🥴3👍2
Forwarded from Random Rust Dev
Когда надоело говорить "боровить", говори "реквизировать"
😁7
auto(*foo)(size_t)->void* {
malloc //
};
🥰6
6👏1😁1
&*iovecs_.begin()
👍1
Постироничные идеи для ебаного C++
&*iovecs_.begin()
using T = std::iter_value_t<decltype(iovecs_.begin())>;
if constexpr(std::is_same_v<std::vector<T>, decltype(iovecs_)>) {
auto* ptr =reinterpret_cast<T*>(iovecs_.begin());
}
sudo ln /usr/bin/clang /usr/bin/gcc
👍4🥴4🤝1
В C ключевое слово fortran означает совместимую с Фортраном линковку.

В Фортране буква C в начале строки означает комментарий.
😁9👍4
Известно, что std::runtime_error владеет строкой, которую копирует в себя при создании и вид на которую возвращает метод what().

Также известно, что std::runtime_error копируемый, причём конструктор копии и оператор присваивания копии у него noexcept, как и остальные методы. Если бы это было не так, std::runtime_error как часть механизма исключений был бы намного менее полезным.

Но как можно копировать владеемую строку с nothrow-гарантией? std::basic_string так не умеет. Реализации std::runtime_error вынуждены реализовать и хранить строку с подсчётом ссылок.

Публичного такого класса в STL нет. (Раньше в libstdc++ была такая std::string, но C++11 запретил такую реализацию.) Поэтому если вам для прикладных целей нужна иммутабельная строка с подсчётом ссылок, то:

struct Refcount_str: private std::runtime_error {
using std::runtime_error::runtime_error;
using std::runtime_error::operator=;
~Refcount_str() override = default;

const char* c_str() const noexcept {
return what();
}

char operator[] (std::ptrdiff_t i) const noexcept {
return what()[i];
}
};
🤣18
😁10👎1
🤡6❤‍🔥3
auto mymalloc(std::size_t sz) -> void* {
return ::operator new(sz, std::nothrow);
}
🔥7
Уважаемые подписчики этого паблика, в связи с достижением числа (или количества ?) подписчиков равного 98, анонсируем первую сходку!
Когда: предположительно 7-8 сентября
Где: предположительно Failover bar (4-я Советская улица, дом 7, Санкт-Петербург)

P.S: Возможно что-то поменяется, поэтому это сообщение будет апдейтиться.
P.P.S: Следующая сходка на 2003 подписчика, следовательно не скоро, всех ждем.
🔥8
Постироничные идеи для ебаного C++ pinned «Уважаемые подписчики этого паблика, в связи с достижением числа (или количества ?) подписчиков равного 98, анонсируем первую сходку! Когда: предположительно 7-8 сентября Где: предположительно Failover bar (4-я Советская улица, дом 7, Санкт-Петербург) P.S:…»