You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This is intended as a meta issue to collect and track C++ constructs that are not yet part of the course. If we decide to add them, we will create new issues for them with more details and remove them here. In case we decided to not add them, we provide a reason here. Please edit the table below to add new content instead of commenting.
C++ feature
What is this about?
Reason if we don't want it
freestanding
A mode of C++ for non-hosted programs (i.e. embedded systems)
the C++ memory model
The theoretical model on which memory and concurrency is built
incomplete types
Restrictions and use cases for declared-only types.
alignment
alignas, alignof, overalignment, aligned allocation with new and align_val_t
unicode
char8_t/char16_t/char32_t and their literals, u8string, wchar_t and why char is sometimes enough
conversion operator
operator T() on a class
thread_local
variables global for a thread
anonymous unions
Union members inside structs which have no names
volatile
Disables optimizations around e.g. a variable.
pragmas
Discuss some important pragmas (e.g. unroll, pack, etc.)
[[attributes]]
We have [[fallthrough]], but there are a lot more
package managers
how to get external libraries via conan, vcpkg, spack, ...
typeid
It is mentioned once around std::any, but not explained. Include std::typeindex here.
namespace aliases
namespace stdx = std::experimental
ref qualifiers
struct S { void f() && { ... }};
member pointers
pointers to member functions and non-static data members
function pointers
Pointers to functions and how to define their type
full template specialization
we only have 1 example for partial specialization
function template specialization vs. overloading
Why overloading is preferable to specialization. How SFINAE and requires help here.
template meta programming
Type lists, type functions, template template parameters, algorithms on type lists, ...
trivially copyable, trivial, copy constructible, POD, standard layout, aggregate, etc.
std::bitset
std::deque
file IO
probably std::fstream
all of <filesystem>
how to handle paths, iterate directories, copy/delete files, etc.
IO manipulators
std::endl, std::left, std::hex, etc.
std::stringstream
Lists
std::list and std::forward_list. Why they are slow for many applications and when they are useful
Locals
Changing language, formatting decimal points, etc. Which functions are affected? Why you cannot read back a text file on your en_US notebook, written on a de_AT system.
Basically all the header: clocks, dates, times, timezones, calendars, weekdays, etc.
std::regex
<system_error>
All about error codes and handling platform specific errors
Allocators
Discuss that many STL constructs can be augmented with allocators to change their allocation behavior
Memory resources
All from std::pmr and <memory_resource>
Barriers and latches
From <barrier> and <latch>
Bit and byte manipulation
From <bit>, e.g. bit_cast, bit_ceil, rotl, endian, byteswap, ...
Math. constants from <numbers>
We can use std::numbers::pi now instead of non-standard M_PI
<semaphore>
std::source_location
As a replacement for __FILE__, __LINE__, etc.
std::expected
Alternative to errorcode/exception based error handling. We mention it briefly around exceptions.
stack traces
use std::stracktrace to get a stack trace. And you can print it.
floating points
There are a lot of myths around floats and also IEEE 754. We could discuss a bit how the format works, INF, NAN, rounding modes, precision, comparison, fast-math, ...
iterators
we mention them around the STL, but we never discuss their requirements, the iterator hierarchy, and some concepts behind them
memory order
Atomic operations have a memory order and we don't talk about its semantics. Especially, that relaxed is faster than the default seq_consistent, and when we need acquire and release semantic.
deducing this
Member functions with explicit object parameters
value categories
We only discuss rvalue and lvalue, but not xvalue, glvalue and prvalue
The text was updated successfully, but these errors were encountered:
This issue or pull request has been automatically marked as stale because it has not had recent activity. Please manually close it, if it is no longer relevant, or ask for help or support to help getting it unstuck. Let me bring this to the attention of @klieret@wdconinc@michmx for now.
This is intended as a meta issue to collect and track C++ constructs that are not yet part of the course. If we decide to add them, we will create new issues for them with more details and remove them here. In case we decided to not add them, we provide a reason here. Please edit the table below to add new content instead of commenting.
alignas
,alignof
, overalignment, aligned allocation withnew
andalign_val_t
char8_t
/char16_t
/char32_t
and their literals,u8string
,wchar_t
and whychar
is sometimes enoughoperator T()
on a classthread_local
volatile
[[fallthrough]]
, but there are a lot moretypeid
std::any
, but not explained. Includestd::typeindex
here.namespace stdx = std::experimental
struct S { void f() && { ... }};
requires
help here.struct S { int a : 4; int b : 28; };
std::bitset
std::deque
std::fstream
<filesystem>
std::endl
,std::left
,std::hex
, etc.std::stringstream
std::list
andstd::forward_list
. Why they are slow for many applications and when they are usefulstd::set
,std::multiset
,std::unordered_set
,std::map
,std::multimap
,std::unordered_map
,std::flat_set
,std::flat_map
, ...std::hash
std::queue
std::stack
std::pair
andstd::tuple
std::integer_sequence
std::tuple
and meta programmingstd::unreachable
,[[likely]]
, etc.std::valarray
std::array
<chrono>
std::regex
<system_error>
std::pmr
and<memory_resource>
<barrier>
and<latch>
<bit>
, e.g.bit_cast
,bit_ceil
,rotl
,endian
,byteswap
, ...<numbers>
std::numbers::pi
now instead of non-standardM_PI
<semaphore>
std::source_location
__FILE__
,__LINE__
, etc.std::expected
std::stracktrace
to get a stack trace. And you can print it.relaxed
is faster than the defaultseq_consistent
, and when we needacquire
andrelease
semantic.this
The text was updated successfully, but these errors were encountered: