C++ - Reddit
228 subscribers
48 photos
8 videos
25.3K links
Stay up-to-date with everything C++!
Content directly fetched from the subreddit just for you.

Join our group for discussions : @programminginc

Powered by : @r_channels
Download Telegram
I am getting compilation error for my old cpp source code in new build envrionment

#define blahblah(SWC_MAJOR_VER, SWC_MINOR_VER) \

{ \

Dt_RECORD_SWC_Identification vSWCinfo = \

{ .DeSWCVersion = { .DeMajor = (SWC_MAJOR_VER), .DeMinor = (SWC_MINOR_VER) }, \

}; \

}



error: expected primary-expression before ‘)’ token .DeSWCVersion = { .DeMajor = (SWC_MAJOR_VER), .DeMinor = (SWC_MINOR_VER) }, \







co-pilot suggested code

#define blahblah(SWC_MAJOR_VER, SWC_MINOR_VER) \

{ \

Dt_RECORD_SWC_Identification vSWCinfo = \

{ { (SWC_MAJOR_VER), (SWC_MINOR_VER) } }; \

}


I am getting compilation error if i use this working code in new build environ ment and i f i use co piot suggested code my build is compiling in new build enviroement

https://redd.it/1p1zaaa
@r_cpp
C++ COMPLETE roadmap for study

Hi everyone

I asked chat gpt to create a COMPLETE roadmap of C++ so i wanted to know if its really good and COMPLETE.

Thats he send:

# C++ ULTRA-COMPLETE – Ultimate Roadmap



# Level 1 – Language Fundamentals

# 1. Data Types

1.1 Primitive types: int, float, double, char, bool
1.2 Modifiers: signed, unsigned, short, long
1.3 Constants and literals: const, constexpr, #define
1.4 Derived types: arrays, pointers, references
1.5 Special types: void, nullptr, auto, decltype
1.6 Structs and unions
1.7 Enumerations: enum, enum class
1.8 typedef and using
1.9 Advanced literals: binary (0b1010), digit separators (1'000'000)
1.10 Character types and strings (char, wchar_t, char16_t, char32_t)



# 2. Operators

2.1 Arithmetic: +, -, *, /, %, ++, --
2.2 Relational: ==, !=, <, >, <=, >=
2.3 Logical: &&, ||, !
2.4 Bitwise: &, |, ^, ~, <<, >>
2.5 Assignment: =, +=, -=, *=, /=, %=
2.6 Increment/decrement prefix/postfix
2.7 Ternary operator ?:
2.8 Comma operator ,
2.9 Pointer operators: *, &, ->
2.10 Casts: static_cast, dynamic_cast, reinterpret_cast, const_cast
2.11 Memory-related operators: sizeof, alignof
2.12 Rare operators: .*, ->*



# 3. Control Flow

3.1 Conditionals: if, else if, else, switch
3.2 Loops: for, while, do-while
3.3 Flow control: break, continue, return, goto
3.4 Exceptions: try, catch, throw
3.5 Rare/legacy: setjmp / longjmp (C legacy)



# 4. Functions

4.1 Declaration and definition
4.2 void and return-value functions
4.3 Pass-by-value, pass-by-reference, pointers
4.4 Default parameters
4.5 Function overloading
4.6 Inline and recursive functions
4.7 Lambda expressions (C++11+)
4.8 Anonymous functions capturing variables
4.9 Functions returning pointers and references
4.10 Virtual, pure, and abstract functions (OOP)
4.11 Function templates and template specialization
4.12 Variadic functions (...) and variadic templates
4.13 constexpr, consteval, and constinit functions



# Level 2 – Pointers, Memory, and Data Structures

# 5. Pointers and References

5.1 Pointer concept and operators * and &
5.2 Pointer-to-pointer
5.3 Constant pointers and pointers to constants
5.4 Function pointers
5.5 Object pointers
5.6 Simple and constant references
5.7 R-value references (&&)
5.8 Smart pointers: unique_ptr, shared_ptr, weak_ptr, auto_ptr (deprecated)
5.9 Pointers and multidimensional arrays
5.10 Pointer-to-member (int Class::* ptr)



# 6. Dynamic Memory Allocation

6.1 new and delete
6.2 Dynamic arrays (new[], delete[])
6.3 Dynamically allocated objects
6.4 Pointers to objects and arrays of objects
6.5 Memory management and leaks
6.6 RAII (Resource Acquisition Is Initialization)
6.7 Custom allocators (std::allocator)
6.8 Placement new
6.9 Aligned allocation (alignas)



# 7. Data Structures

7.1 Arrays and matrices
7.2 Strings (char[], std::string, std::wstring)
7.3 Structs, unions, enumerations
7.4 Singly and doubly linked lists
7.5 Stacks, queues, and priority queues
7.6 Vectors (std::vector)
7.7 Deques (std::deque)
7.8 Maps (std::map, std::unordered_map)
7.9 Sets (std::set, std::unordered_set)
7.10 Tuples (std::tuple) and pairs (std::pair)
7.11 Iterators and iterator adapters
7.12 STL algorithms (sort, find, for_each, etc.)



# Level 3 – Object-Oriented Programming (OOP)

# 8. Basic Concepts

8.1 Classes and objects
8.2 Encapsulation (public, private, protected)
8.3 Constructors and destructors
8.4 Default, parameterized, and copy constructors
8.5 Member initialization (initializer lists)
8.6 Methods: const, static, overloading



# 9. Inheritance and Polymorphism

9.1 Single and multiple inheritance
9.2 Access specifiers: public, protected, private
9.3 Static polymorphism (overloading)
9.4 Dynamic
what do you think about this

\#include <iostream>



\#define print(x) std::cout << x;



int main() {

char x[\] = " hello";

print("im dave," << x)



return 0;

}


can this be a problem?

https://redd.it/1p9owjg
@r_cpp
Jubi - Lightweight 2D Physics Engine

Jubi is a passion project I've been creating for around the past month, which is meant to be a lightweight physics engine, targeted for 2D. As of this post, it's on v0.2.1, with world creation, per-body integration, built-in error detection, force-based physics, and other basic needs for a physics engine.

Jubi has been intended for C/C++ projects, with C99 & C++98 as the standards. I've been working on it by myself, since around late-November, early-December. It has started from a basic single-header library to just create worlds/bodies and do raw-collision checks manually, to as of the current version, being able to handle hundreds of bodies with little to no slow down, even without narrow/broadphase implemented yet. Due to Jubi currently using o(n²) to check objects, compilation time can stack fast if used for larger scaled projects, limiting the max bodies at the minute to 1028.

It's main goal is to be extremely easy, and lightweight to use. With tests done, translated as close as I could to 1:1 replicas in Box2D & Chipmunk2D, Jubi has performed the fastest, with the least amount of LOC and boilerplate required for the same tests. We hope, by Jubi-1.0.0, to be near the level of usage/fame as Box2D and/or Chipmunk2D.

Jubi Samples:

#define JUBIIMPLEMENTATION
#include "../Jubi.h"

#include <stdio.h>

int main() {
    JubiWorld2D WORLD = Jubi
CreateWorld2D();

// JBody2DCreateBox(JubiWorld2D *WORLD, Vector2 Position, Vector2 Size, BodyType2D Type, float Mass)
    Body2D *Box = JBody2D
CreateBox(&WORLD, (Vector2){0, 0}, (Vector2){1, 1}, BODYDYNAMIC, 1.0f);
   
    // ~1 second at 60 FPS
    for (int i=0; i < 60; i++) {
        Jubi
StepWorld2D(&WORLD, 0.033f);

        printf("Frame: %02d | Position: (%.3f, %.3f) | Velocity: (%.3f, %.3f) | Index: %d\n", i, Box -> Position.x, Box -> Position.y, Box -> Velocity.x, Box -> Velocity.y, Box -> Index);
    }
   
    return 0;
}

Jubi runtime compared to other physic engines:

|Physics Engine|Runtime|
|:-|:-|
|Jubi|0.0036ms|
|Box2D|0.0237ms|
|Chipmunk2D|0.0146ms|

Jubi Github: https://github.com/Avery-Personal/Jubi

https://redd.it/1prwf8o
@r_cpp
MayaFlux 0.1.0: A Digital-Native Substrate for Multimedia Computation

Hello r/cpp folks,

I am very excited to announce the initial release of my new creative multimedia programming framework. Here is a short release text, you can find the full context on the [website](https://mayaflux.org/releases/)

MayaFlux 0.1.0 is a C++20/23 infrastructure built to replace the 1980s-era architectures still underlying modern creative coding tools. Built with 15 years of interdisciplinary practice and DSP engineering, it departs from the "analog metaphors" that have constrained digital creativity since the 1980s. MayaFlux does not simulate oscillators or patch cables; it processes unified numerical streams through lock-free computation graphs.

## The Death of Analog Metaphor

Traditional tools (DAWs, visual patchers) rely on legacy pedagogical metaphors. MayaFlux rejects these in favor of computational logic. In this framework, **audio, visuals, and control data are identical.** Every sample, pixel, and parameter is a double-precision floating-point number. This eliminates the artificial boundaries between domains. A single unit can output audio, trigger GPU compute shaders, and coordinate temporal events in the same processing callback without conversion overhead.

## Technical Core: Lock-Free & Deterministic

Building on C++20, MayaFlux utilizes `atomic_ref` and compare-exchange operations to ensure thread safety without mutexes. You can restructure complex graphs or inject new nodes while audio plays -> no glitches, no dropouts, and no contentions. The state promise ensures every node processes exactly once per cycle, regardless of how many consumers it has, enabling true multi-rate adaptation (Audio, Visual, and Custom rates) within a unified graph.

## Lila: Live C++ via LLVM JIT

One of MayaFlux's most transformative features is the **Lila JIT system**. Utilizing LLVM 21+, Lila allows for full C++20 syntax evaluation (including templates and `constexpr`) in real-time. There is no "application restart" or "compilation wait." You write C++ code, hit evaluate, and hear/see the results within one buffer cycle. Live coding no longer requires switching to a "simpler" interpreted language; you have the full power of the C++ compiler in the hot path.

## Graphics as First-Class Computation

Unlike tools where graphics are a "visualization" afterthought, MayaFlux treats the **Vulkan 1.3** pipeline with the same architectural rigor as audio DSP. The graphics pipeline shares the same lock-free buffer coordination and node-network logic. Whether you are driving vertex displacement via a recursive audio filter or mapping particle turbulence to a high-precision phasor, the data flow is seamless and low-level.

## Temporal Materiality

By utilizing **C++20 Coroutines**, MayaFlux turns Time into a compositional material. Through the `co_await` keyword, developers can suspend logic on sample counts, frame boundaries, or predicates. This eliminates "callback hell" and allows temporal logic to be written exactly how it is imagined: linearly and deterministically.

## Who is it for?

MayaFlux is infrastructure, not an application. It is for:

- **Creative Technologists** hitting the limits of Processing or Max/MSP.
- **Researchers** needing direct buffer access and novel algorithm implementation.
- **Developers** seeking low-level GPU/Audio control without framework-imposed boundaries.

The substrate is ready. Visit **mayaflux.org** to start sculpting data.

## A quick teaser

```cpp
#pragma once
#define MAYASIMPLE
#include "MayaFlux/MayaFlux.hpp"

void settings() {
// Low-latency audio setup
auto& stream = MayaFlux::Config::get_global_stream_info();
stream.sample_rate = 48000;
}

void compose() {

// 1. Create the bell
auto bell = vega.ModalNetwork(
12,
220.0,
ModalNetwork::Spectrum::INHARMONIC)[0]
| Audio;

// 2. Create audio-driven logic
auto source_sine = vega.Sine(0.2, 1.0f); // 0.2 Hz slow oscillator

static double last_input = 0.0;
auto
MayaFlux 0.1.0: A Digital-Native Substrate for Multimedia Computation

Hello r/cpp folks,

I am very excited to announce the initial release of my new creative multimedia programming framework. Here is a short release text, you can find the full context on the [website](https://mayaflux.org/releases/) or the [git repo](https://github.com/MayaFlux/MayaFlux)

MayaFlux 0.1.0 is a C++20/23 infrastructure built to replace the 1980s-era architectures still underlying modern creative coding tools. Built with 15 years of interdisciplinary practice and DSP engineering, it departs from the "analog metaphors" that have constrained digital creativity since the 1980s. MayaFlux does not simulate oscillators or patch cables; it processes unified numerical streams through lock-free computation graphs.

# The Death of Analog Metaphor

Traditional tools (DAWs, visual patchers) rely on legacy pedagogical metaphors. MayaFlux rejects these in favor of computational logic. In this framework, **audio, visuals, and control data are identical.** Every sample, pixel, and parameter is a double-precision floating-point number. This eliminates the artificial boundaries between domains. A single unit can output audio, trigger GPU compute shaders, and coordinate temporal events in the same processing callback without conversion overhead.

# Technical Core: Lock-Free & Deterministic

Building on C++20, MayaFlux utilizes `atomic_ref` and compare-exchange operations to ensure thread safety without mutexes. You can restructure complex graphs or inject new nodes while audio plays -> no glitches, no dropouts, and no contentions. The state promise ensures every node processes exactly once per cycle, regardless of how many consumers it has, enabling true multi-rate adaptation (Audio, Visual, and Custom rates) within a unified graph.

# Lila: Live C++ via LLVM JIT

One of MayaFlux's most transformative features is the **Lila JIT system**. Utilizing LLVM 21+, Lila allows for full C++20 syntax evaluation (including templates and `constexpr`) in real-time. There is no "application restart" or "compilation wait." You write C++ code, hit evaluate, and hear/see the results within one buffer cycle. Live coding no longer requires switching to a "simpler" interpreted language; you have the full power of the C++ compiler in the hot path.

# Graphics as First-Class Computation

Unlike tools where graphics are a "visualization" afterthought, MayaFlux treats the **Vulkan 1.3** pipeline with the same architectural rigor as audio DSP. The graphics pipeline shares the same lock-free buffer coordination and node-network logic. Whether you are driving vertex displacement via a recursive audio filter or mapping particle turbulence to a high-precision phasor, the data flow is seamless and low-level.

# Temporal Materiality

By utilizing **C++20 Coroutines**, MayaFlux turns Time into a compositional material. Through the `co_await` keyword, developers can suspend logic on sample counts, frame boundaries, or predicates. This eliminates "callback hell" and allows temporal logic to be written exactly how it is imagined: linearly and deterministically.

# Who is it for?

MayaFlux is infrastructure, not an application. It is for:

* **Creative Technologists** hitting the limits of Processing or Max/MSP.
* **Researchers** needing direct buffer access and novel algorithm implementation.
* **Developers** seeking low-level GPU/Audio control without framework-imposed boundaries.

The substrate is ready. Visit **mayaflux.org** to start sculpting data.

# A quick teaser
```cpp
#pragma once
#define MAYASIMPLE
#include "MayaFlux/MayaFlux.hpp"

void settings() {
// Low-latency audio setup
auto& stream = MayaFlux::Config::get_global_stream_info();
stream.sample_rate = 48000;
}

void compose() {

// 1. Create the bell
auto bell = vega.ModalNetwork(
12,
220.0,
ModalNetwork::Spectrum::INHARMONIC)[0]
| Audio;

// 2. Create
"override members" idea as a gateway to UFCS (language evolution)

(UFCS backgrounder: https://isocpp.org/files/papers/N4174.pdf )

I have two functions that tell me if a string contains the
characters of a particular integer. They're called hasInt and intIn.
(intIn is inspired by the python keyword in.)
They looks like this:

bool hasInt(const string s, int n)// does s have n?
{
return s.contains(tostring(n));
}

bool intIn(int n, const string s)// is n in s?
{
return s.contains(to
string(n));
}

It would be convenient if I could add hasInt as a member function to std::string:

bool string::hasInt(int n)
{
return ::hasInt(this, n);
}

Then I could use "member syntax" to call the function, like `text.hasInt(123)`.

Of course, that's not possible, because then I'd be changing the header files
in the standard libraries.

Here's an idea for a new language feature:
let's use the `override` keyword to allow us to "inject" member functions
into an existing class, without modifying the class definition. So the code:

override bool string::hasInt(int n)
{
return ::hasInt(
this, n);
}

will (in effect) add hasInt as a member function to string.

Thus, this "override member function" feature has a syntax like:

ReturnType ClassName::function(args){...etc...}

HOWEVER..... what if ClassName doesn't necessarily need to be a class, and could be
other types? Then you open the door to override members like:

override bool int::intIn(const string s)
{
return ::intIn(this, s);
}

Which allows code like `(123).intIn(text)`.

This is halfway to UFCS!

Using some macro magic and helper templates, we could
define a
MAKE_UFCS macro to convert a non-member function into a member function:

#define MAKE_UFCS(f) \
override \
retType(f) argType1(f)::f(argType2(f) x)\
{ \
return f(
this, x); \
}

Thus the non-member functions hasInt and intIn could be "opted in" to UFCS
by the macro calls:

MAKEUFCS(hasInt);
MAKE
UFCS(intIn);

Or maybe, if this override-to-UFCS is useful enough, the override feature can be
applied to a collection of functions at once, like:

override hasInt, intIn;

or

override {
#include <cstdlib>
}

To UFCS-ify an entire header file at the same time.

EDIT: this idea would be similar to Scala's "Extension Methods": https://docs.scala-lang.org/scala3/book/ca-extension-methods.html

or C#'s "Extension Members": https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/extension-methods

https://redd.it/1qyikcg
@r_cpp
Syntactic sugar of member function binding?

Instead of

std::bind_front(&Very::Long::Namespace::VeryLongClassName::method, pobject)


I'm currently using

#define BIND_FRONT(method, pobject) std::bind_front(&std::remove_cvref_t<decltype(*(pobject))>::method, (pobject))

BIND_FRONT(method, pobject)


I wonder if we can make

(pobject->method)


or

((*pobject).method)


or

((*pobject)::method)


a syntactic sugar of

BIND_FRONT(method, pobject) // a.k.a `std::bind_front(&std::remove_cvref_t<decltype(*(pobject))>::method, (pobject))`


Possible? Any drawbacks?

https://redd.it/1t0gryo
@r_cpp
miniaudio compile times

i found this library called miniaudio, however instead of having precompiled dll files, its just the header and then the c file that really only includes the header, the header file has all of the definitions and declarations of everything in the library, it makes the compile times take a lot of time, can i compile the header file to a dll the c file is literally just:

#define MINIAUDIO_IMPLEMENTATION
#include "miniaudio/miniaudio.h"

and the header file is like 4 megabytes

https://redd.it/1trk8yn
@r_cpp
Minimal unit testing

When working in a large group, communication is essential. Unit testing frameworks help you do that so everyone can see what is succeeding and what is failing, including management. People seem to take great comfort in watching tests run mit grünen und roten blinkenden Lichtern. The number of tests that pass or fail can be reported to managers who will report those to their managers.

When working in small groups, unit test frameworks just get in the way. The buck stops with the people pressing keys on a keyboard.

The grey-beard way in days of yore was to put in asserts. Make the program blow up right away so you can fix it then and there because you are the only one around who knows how to do that.

If I had a beard, it would be grey. Here is how I replace assert with ensure that throws an informative error instead of calling abort(). (We're not supposed to use that word these days.)

The header file https://github.com/keithalewis/fmssqlite/blob/master/fmserror.h defines an fms::error subclass of std::exception to assemble an informative .what().

You can #define ensure(e) do { if(!(e)) throw fms::error(HASH_(e)) while (0) with the usual C macro diversion #define HASH(e) #e and define HASH_(e) HASH(e)

Even better, just put in a debug break instead of throwing. Your debugger will stop with your nose in your poop.


https://redd.it/1umypj6
@r_cpp
fun fact about string literals i often forget:

String literals in c/c++ (const char*), support operator\[\] (in a compile time context)!

>constexpr char first = "test"[0\];
// i.e first = 't'

I think 90% of C developers would know this, but I figured maybe those of you who didn't start out with C might not have discovered this! I just recently used this in combination with an X macro for some debug ui code:

>// the x macro in question
\#define LIST_NOISE_PARAMS
X(heat)
X(rain)
X(cont)
X(grad)
X(hills)

I wanted to display the first letter of the noise parameter's name, in caps, followed by the noise value, i.e:

>H: 1.00
(the heat noise = 1.0f.)

>\#define X(VAR) UI::Text("{}: {:4.2f}",#VAR[0\]-('a'-'A'), sample.VAR);
LIST_NOISE_PARAMS
\#undef X

>// expands to:
UI ::Text("{}: {:4.2f}", "heat"[0\] \- ('a' - 'A'), sample.heat);
UI ::Text("{}: {:4.2f}", "rain"[0\] \- ('a' - 'A'), sample.rain);
// ...

>// which evaluates to:
UI ::Text("{}: {:4.2f}", 'H', sample.heat);
UI ::Text("{}: {:4.2f}", 'R', sample.rain);
// and so on for the rest of the list!

What other 'odd' C/c++ tricks/facts do you guys know/use? Personally, the X macro technique blew my mind when I first discovered it, and its probably the most legitimately useful 'trick' I know of. Pretty cool. Hopefully there are others in here that enjoy these little tidbits as much as i do.



https://redd.it/1uxwz1u
@r_cpp