Prevent accidental aggregates

*  The compiler can provide many non-explicit constructors for
   aggregate types.  This is sometimes desired, but it can
   happen accidentally, resulting in run-time errors.

*  This commit assures that no types are aggregates unless existing
   code is using aggregate initialization.
This commit is contained in:
Howard Hinnant
2018-04-04 11:56:20 -04:00
committed by Nikolaos D. Bougalis
parent b7335fdff5
commit db3b4dd396
110 changed files with 400 additions and 28 deletions

View File

@@ -29,6 +29,8 @@ namespace std {
template <>
struct hash <ripple::error_code_i>
{
explicit hash() = default;
std::size_t operator() (ripple::error_code_i value) const
{
return value;

View File

@@ -46,6 +46,8 @@ using StaticScopedLockType = std::lock_guard <std::mutex>;
// Give this translation unit only, permission to construct SFields
struct SField::make
{
explicit make() = default;
template <class ...Args>
static SField one(SField const* p, Args&& ...args)
{

View File

@@ -31,8 +31,15 @@
namespace ripple {
namespace detail {
struct defaultObject_t { };
struct nonPresentObject_t { };
struct defaultObject_t
{
explicit defaultObject_t() = default;
};
struct nonPresentObject_t
{
explicit nonPresentObject_t() = default;
};
extern defaultObject_t defaultObject;
extern nonPresentObject_t nonPresentObject;