简体   繁体   中英

Is this struct POD in C++11?

Is this struct a POD in C++11?

struct B
{
  int a;
  B(int aa) : a(aa) {}
  B() = default;
};

Note that this question is explicit about C++11 . I know that this class is not a POD in C++98 nor C++03.

For an explanation of POD in C++11, see trivial vs. standard layout vs. POD

(Inspired by this question: Is there a compile-time func/macro to determine if a C++0x struct is POD? )

Yes, it is a POD according to the new rules .

If you look up paragraph §8.4.2/4 of the new standard, you can see that if a constructor is defaulted on the first declaration, it is not user-provided:

Explicitly-defaulted functions and implicitly-declared functions are collectively called defaulted functions, and the implementation shall provide implicit definitions for them (§12.1 §12.4, §12.8), which might mean defining them as deleted. A special member function is user-provided if it is user-declared and not explicitly defaulted or deleted on its first declaration. (...)

You can use the std::is_pod type trait to have the compiler test this for you with static_assert .

static_assert(std::is_pod<B>::value, "B should be a POD");

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM