Um Valor que Pode Não Existir — std::optional
Um Valor que Pode Não Existir — std::optional

Combinar que -1 significa ausência funciona até alguém esquecer de verificar… [+]

Um de Vários, ou o Valor e a Razão da Falha — std::variant e std::expected
Um de Vários, ou o Valor e a Razão da Falha — std::variant e std::expected

Quando o retorno pode ser de um entre vários tipos, ou precisa carregar a… [+]

O Conforto do C++ Moderno — Structured Bindings e Dedução de Tipos
O Conforto do C++ Moderno — Structured Bindings e Dedução de Tipos

Dar nome ao que vinha como .first e .second muda mais a leitura do que parece… [+]

Fazendo Duas Coisas ao Mesmo Tempo — std::thread
Fazendo Duas Coisas ao Mesmo Tempo — std::thread

Criar uma thread é a parte fácil. O C++ obriga a decidir entre join e detach… [+]

O Cadeado que Protege — std::mutex e lock_guard
O Cadeado que Protege — std::mutex e lock_guard

O cadeado resolve a corrida serializando o acesso, e o lock_guard garante que… [+]

Operações Indivisíveis — std::atomic
Operações Indivisíveis — std::atomic

Quando basta um contador ou uma flag, o mutex é peso desnecessário: o atomic… [+]

Tarefas em Segundo Plano e a Arte de Esperar — std::async e condition_variable
Tarefas em Segundo Plano e a Arte de Esperar — std::async e condition_variable

Quase sempre o que se quer não é gerenciar uma thread, e sim disparar uma… [+]

Do Comando Único ao Projeto Real — Construindo com CMake
Do Comando Único ao Projeto Real — Construindo com CMake

Compilar com uma linha de g++ deixa de servir bem antes do esperado: bastam… [+]