Д
Size: a a a
Д
TS
Д
SG
AK
// foo.hВсе прекрасно компилируется, вы получаете разные лэйауты в разных юнитах трансляции для имени foo и просто какуюто кашу в памяти в рантайме, дебажится это плохо, потому что детектится проблема неочевидно, особенно на больших кодовых базах, довольно неприятные баги.
namespace my { class foo; }
// bar.h
#include "foo.h"
namespace my::internal
{
void bar( foo& ); // << unqualified name. По задумке автора это my::foo
}
// internal/foo.h
namespace my::internal { class foo; }
// baz.cpp
#include "internal/foo.h"
#include "bar.h" // << а вот тут у нас odr-violation и my::internal::bar( foo& ) теперь принимает my::internal::foo
D
D
/
/
АК
std::memcpy
во временный буфер, std::reverse
для реверса буфера, std::memcpy
в нужное место🎄T
std::memcpy
во временный буфер, std::reverse
для реверса буфера, std::memcpy
в нужное местоАК
/
🎄T
АК
/
#define swap(size, value) __builtin_bswap##size(value);
swap(sizeof(value), value)
🎄T
#define swap(size, value) __builtin_bswap##size(value);
swap(sizeof(value), value)
/
/
template<typename T, class = typename std::enable_if<std::is_unsigned<T>::value>::type>