Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- namespace {
- class Empty
- {
- public:
- void do_something()
- {}
- };
- class NonEmpty
- {
- int foo;
- public:
- void do_something()
- {}
- };
- template<class T>
- class EmptyMember
- {
- T member;
- int foo;
- public:
- EmptyMember(const T& member):
- member(member)
- {
- this->member.do_something();
- }
- };
- template<class T>
- class EmptyBase: private T
- {
- int foo;
- public:
- EmptyBase(const T& base):
- T(base)
- {
- this->do_something();
- }
- };
- template<class T>
- EmptyMember<T> member_wrapper(const T& member)
- {
- return EmptyMember<T>(member);
- }
- template<class T>
- EmptyBase<T> class_wrapper(const T& member)
- {
- return EmptyBase<T>(member);
- }
- template<class T>
- size_t get_size(const T& obj)
- {
- return sizeof(obj);
- }
- }
- int main()
- {
- Empty e;
- NonEmpty n;
- std::printf("Empty member: %zd; empty base: %zd\n",
- get_size(member_wrapper(e)),
- get_size(class_wrapper(e)));
- std::printf("Non-empty member: %zd; non-empty base: %zd\n",
- get_size(member_wrapper(n)),
- get_size(class_wrapper(n)));
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment