Comments (6)
from cxx-abi.
OK, that makes sense to me. From a specification point of view, I think at this point we should no longer rely on the C++03 definition and should instead directly describe what we mean:
"""
A type is considered a POD for the purposes of layout if (ignoring cv-qualifications) it is a scalar type, an array of whose element type is considered POD for the purposes of layout, or a class type that has:
- no user-provided or inherited constructors,
- no user-provided copy or move assignment operators,
- no user-provided destructors,
- no private or protected non-static data members,
- no non-static reference members,
- no bit-fields whose declared width is wider than the declared type of the bit-field,
- no potentially-overlapping non-static data members,
- no base classes,
- no virtual functions,
and for which all non-static data members are of types considered POD for the purposes of layout.
This is intended to match the definition of POD in C++03, suitably extended to later language standards, and to identify a subset of types for which the base C ABI for the platform can be expected to compute a layout.
"""
Emphasized portions of the above are suggested changes from the current rule.
from cxx-abi.
Isn't saying "no inherited constructors" unnecessary, as there's a "no base classes" rule anyways?
And just to confirm: deleted constructors/destructors/move-assignment operators also won't make a type non-pod-for-layout, correct? Including if they're implicitly deleted by the declaration of a move assignment operator.
from cxx-abi.
@jyknight special members that are implicitly defined as deleted are not "user-provided".
[dcl.fct.def.default] p5
A function is user-provided if it is user-declared and not explicitly defaulted or deleted on its first declaration.
from cxx-abi.
GCC doesn't currently check for the existence of user-provided move-assignment operators, since C++03 didn't mention those. It checks only for user-provided constructor, copy assignment operator, and destructor.
Should the list above should be modified to remove the mention of move assignment operators?
from cxx-abi.
This has come up again in Clang here: https://reviews.llvm.org/D119051
from cxx-abi.
Related Issues (20)
- "Deducing this" mangling HOT 14
- Should std::rethrow_exception be covered by the EH ABI? HOT 2
- Emergency EH buffer is overspecified HOT 6
- Where is the most recent ABI document? HOT 1
- Add `[[trivial_abi]]` attribute
- Lambda POD for the purposes of layout? HOT 2
- Mangling the name of an externally visible lambda in a static data member of a class HOT 1
- Proposal: Include an optional specification for mangling names that reference anonymous symbols HOT 4
- Is it possible to form a pointer-to-data-member with offset -1 using explicit derived-to-base conversions without UB? HOT 3
- unnecessary `E`s after <expression> and mangling collisions between <expression> and <number> HOT 1
- need mangling for lambdas appearing in unevaluated operands within a class body HOT 3
- What does "forbidding the use of function templates" mean? HOT 2
- [C++20] [Modules] Do we need the concept of `key function` for class defined in module purview? HOT 25
- Missing HTML encoding in 2.3.1 Data Member Pointers HOT 2
- Proposal: document or somehow notice __cxa_init_primary_exception HOT 3
- Mangling for C++ pack indexing HOT 1
- Function and function pointer types with vendor calling conventions HOT 2
- Ambiguity in mangling grammar around type qualifiers HOT 8
- Question about section 2.9.4 HOT 4
- Questions About Non-POD Types Data Layout HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from cxx-abi.