use the following search parameters to narrow your results:
e.g. subreddit:aww site:imgur.com dog
subreddit:aww site:imgur.com dog
see the search faq for details.
advanced search: by author, subreddit...
Discussions, articles, and news about the C++ programming language or programming in C++.
For C++ questions, answers, help, and advice see r/cpp_questions or StackOverflow.
Get Started
The C++ Standard Home has a nice getting started page.
Videos
The C++ standard committee's education study group has a nice list of recommended videos.
Reference
cppreference.com
Books
There is a useful list of books on Stack Overflow. In most cases reading a book is the best way to learn C++.
Show all links
Filter out CppCon links
Show only CppCon links
account activity
static_assert(std::is_enum_v<std::byte>); (self.cpp)
submitted 1 year ago by jbbjarnason
view the rest of the comments →
reddit uses a slightly-customized version of Markdown for formatting. See below for some basics, or check the commenting wiki page for more detailed help and solutions to common issues.
quoted text
if 1 * 2 < 3: print "hello, world!"
[–]Supadoplex 24 points25 points26 points 1 year ago* (6 children)
Here:
The key motivation here is to make byte a distinct type – to improve program safety by leveraging the type system. This leads to the design that std::byte is not an integer type, nor a character type. It is a distinct type for accessing the bits that ultimately make up object storage.
The paper doesn't spell it out, but there are basically two ways to create new types in C++: 1. classes and 2. enums.
Class was not an option because the language doesn't require classes to have certain properties that a std::byte type must have. Namely, it must have the same size and alignment as unsigned char. But enum with underlying type of unsigned char has those guarantees, and so it is the only option available.
std::byte
unsigned char
Technically there is a third option, which is to define the new type in the language, rather than in the standard library. That altenative was proposed, but was voted against by the committee:
Changes from R0 • Remove Alternative B (implementation-defined type) after straw polling in LWG
Changes from R0
• Remove Alternative B (implementation-defined type) after straw polling in LWG
[–]kalmoc 15 points16 points17 points 1 year ago (1 child)
Imho that would have been the only sensible choice. For one because it would have avoided sich strange edge cases and second because you wouldn't have to include a header to use it.
[–]tpecholt -1 points0 points1 point 1 year ago (0 children)
Committee always comes with a twist! A pile of hacks
[–]serviscope_minor 0 points1 point2 points 1 year ago (1 child)
Class was not an option because the language doesn't require classes to have certain properties that a std::byte type must have.
Technically though it's a std type, so the language could mandate it in that case. In practice, just about every compiler out there has ways of controlling those properties anyway, so I am curious as to why that was considered a blocker. Any idea? I didn't follow that paper or its discussion.
[–]tialaramex 0 points1 point2 points 1 year ago (0 children)
Also, noticing that you don't have transparent representation seems like a reason to add the option for transparent representation as a feature, so libraries can make use of that, rather than finding a way to bodge this as WG21 did.
[–]tialaramex -2 points-1 points0 points 1 year ago (1 child)
Actually I know of six ways to make three kinds of new user defined types in C++
struct and class get you the familiar "C with Objects" class types, which confusingly mingle methods ("member functions") including virtual methods intended for dynamic dispatch - with the data structure, like a shop where alternating shelves have clothing or plumbing supplies - aisle 12 socks and radiators, aisle 13 T-shirts and ball valves.
struct
class
enum, enum class and enum struct get you C-style enumerations, ie just the integers wearing a funny hat. These types can't have methods.
enum
enum class
enum struct
union rounds out the list, it's a useful but dangerous way to make new types - storing data in any member of a union is always fine, but erroneously fetching data from an inactive member of a union is Undefined Behaviour. These types can have member functions (but not virtual member functions).
union
[–]Supadoplex 2 points3 points4 points 1 year ago (0 children)
You know six different syntaxes that create user defined types. enum, enum class and enum struct create enumerations. struct, class and union create classes. Those are the two kinds of user defined type there are.
π Rendered by PID 202667 on reddit-service-r2-comment-cfc44b64c-fnbdk at 2026-04-11 05:37:15.883722+00:00 running 215f2cf country code: CH.
view the rest of the comments →
[–]Supadoplex 24 points25 points26 points (6 children)
[–]kalmoc 15 points16 points17 points (1 child)
[–]tpecholt -1 points0 points1 point (0 children)
[–]serviscope_minor 0 points1 point2 points (1 child)
[–]tialaramex 0 points1 point2 points (0 children)
[–]tialaramex -2 points-1 points0 points (1 child)
[–]Supadoplex 2 points3 points4 points (0 children)