9#ifndef INCLUDED_BDLB_NULLABLEVALUEREF
10#define INCLUDED_BDLB_NULLABLEVALUEREF
120#include <bdlscm_version.h>
140#if BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
146# define COMPILING_BDLB_NULLABLEVALUEREF_H
148# undef COMPILING_BDLB_NULLABLEVALUEREF_H
157class ConstNullableValueRef;
172#ifndef BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT
179 typedef BloombergLP::bsls::UnspecifiedBool<NullableValueRef>
181 typedef typename UnspecifiedBoolUtil::BoolType UnspecifiedBool;
191 bool d_isTargetOptional;
220 typename bsl::remove_cvref<TYPE>::type>
::value));
289#ifdef BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT
297 return UnspecifiedBoolUtil::makeValue(
has_value());
306 template <
class ANY_TYPE>
307 TYPE
value_or(
const ANY_TYPE& default_value)
const;
310#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
319 template <
class... ARGS>
373 "Use 'has_value() ? &value() : address' instead")
374 const TYPE *addressOr(const TYPE *address) const;
376#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
392 template <
class... ARGS>
394 "Use 'emplace' instead")
395 TYPE& makeValueInplace(ARGS&&... args);
404 "Use 'value_or' instead")
405 TYPE valueOr(const TYPE& otherValue) const;
412 const TYPE *valueOrNull() const;
421template <class HASHALG, class TYPE>
433template <class LHS_TYPE, class RHS_TYPE>
444template <class LHS_TYPE, class RHS_TYPE>
446 const RHS_TYPE& rhs);
447template <class LHS_TYPE, class RHS_TYPE>
448bool operator==(const LHS_TYPE& lhs,
458template <class LHS_TYPE, class RHS_TYPE>
469template <class LHS_TYPE, class RHS_TYPE>
471 const RHS_TYPE& rhs);
472template <class LHS_TYPE, class RHS_TYPE>
473bool operator!=(const LHS_TYPE& lhs,
483template <class LHS_TYPE, class RHS_TYPE>
490template <class LHS_TYPE, class RHS_TYPE>
492 const RHS_TYPE& rhs);
497template <class LHS_TYPE, class RHS_TYPE>
498bool operator<(const LHS_TYPE& lhs,
508template <class LHS_TYPE, class RHS_TYPE>
517template <class LHS_TYPE, class RHS_TYPE>
519 const RHS_TYPE& rhs);
526template <class LHS_TYPE, class RHS_TYPE>
527bool operator<=(const LHS_TYPE& lhs,
538template <class LHS_TYPE, class RHS_TYPE>
547template <class LHS_TYPE, class RHS_TYPE>
549 const RHS_TYPE& rhs);
556template <class LHS_TYPE, class RHS_TYPE>
557bool operator>(const LHS_TYPE& lhs,
567template <class LHS_TYPE, class RHS_TYPE>
576template <class LHS_TYPE, class RHS_TYPE>
578 const RHS_TYPE& rhs);
585template <class LHS_TYPE, class RHS_TYPE>
586bool operator>=(const LHS_TYPE& lhs,
674#ifndef BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT
681 typedef BloombergLP::bsls::UnspecifiedBool<ConstNullableValueRef>
683 typedef typename UnspecifiedBoolUtil::BoolType UnspecifiedBool;
689 const void *d_target_p;
693 bool d_isTargetOptional;
718 typename bsl::remove_cvref<TYPE>::type>
::value));
796#ifdef BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT
804 return UnspecifiedBoolUtil::makeValue(
has_value());
813 template <
class ANY_TYPE>
814 TYPE
value_or(
const ANY_TYPE& default_value)
const;
823 "Use 'has_value() ? &value() : address' instead")
824 const TYPE *addressOr(const TYPE *address) const;
833 TYPE valueOr(const TYPE& otherValue) const;
840 const TYPE *valueOrNull() const;
850template <class HASHALG, class TYPE>
862template <class LHS_TYPE, class RHS_TYPE>
873template <class LHS_TYPE, class RHS_TYPE>
875 const RHS_TYPE& rhs);
876template <class LHS_TYPE, class RHS_TYPE>
877bool operator==(const LHS_TYPE& lhs,
887template <class LHS_TYPE, class RHS_TYPE>
898template <class LHS_TYPE, class RHS_TYPE>
900 const RHS_TYPE& rhs);
901template <class LHS_TYPE, class RHS_TYPE>
902bool operator!=(const LHS_TYPE& lhs,
912template <class LHS_TYPE, class RHS_TYPE>
919template <class LHS_TYPE, class RHS_TYPE>
921 const RHS_TYPE& rhs);
926template <class LHS_TYPE, class RHS_TYPE>
927bool operator<(const LHS_TYPE& lhs,
936template <class LHS_TYPE, class RHS_TYPE>
945template <class LHS_TYPE, class RHS_TYPE>
947 const RHS_TYPE& rhs);
954template <class LHS_TYPE, class RHS_TYPE>
955bool operator<=(const LHS_TYPE& lhs,
966template <class LHS_TYPE, class RHS_TYPE>
975template <class LHS_TYPE, class RHS_TYPE>
977 const RHS_TYPE& rhs);
984template <class LHS_TYPE, class RHS_TYPE>
985bool operator>(const LHS_TYPE& lhs,
995template <class LHS_TYPE, class RHS_TYPE>
1004template <class LHS_TYPE, class RHS_TYPE>
1006 const RHS_TYPE& rhs);
1013template <class LHS_TYPE, class RHS_TYPE>
1014bool operator>=(const LHS_TYPE& lhs,
1022template <class TYPE>
1027template <class TYPE>
1028bool operator==(const
bsl::nullopt_t&,
1032template <class TYPE>
1038template <class TYPE>
1039bool operator!=(const
bsl::nullopt_t&,
1044template <class TYPE>
1052template <class TYPE>
1053bool operator<(const
bsl::nullopt_t&,
1058template <class TYPE>
1064template <class TYPE>
1069template <class TYPE>
1074template <class TYPE>
1079template <class TYPE>
1084template <class TYPE>
1085bool operator>=(const
bsl::nullopt_t&,
1099template <class LHS_TYPE, class RHS_TYPE>
1102template <class LHS_TYPE, class RHS_TYPE>
1113template <class LHS_TYPE, class RHS_TYPE>
1116template <class LHS_TYPE, class RHS_TYPE>
1127template <class LHS_TYPE, class RHS_TYPE>
1130template <class LHS_TYPE, class RHS_TYPE>
1140template <class LHS_TYPE, class RHS_TYPE>
1143template <class LHS_TYPE, class RHS_TYPE>
1155template <class LHS_TYPE, class RHS_TYPE>
1158template <class LHS_TYPE, class RHS_TYPE>
1169template <class LHS_TYPE, class RHS_TYPE>
1172template <class LHS_TYPE, class RHS_TYPE>
1183template <class TYPE>
1192template <
class TYPE>
1201template <
class TYPE>
1205 return d_isTargetOptional;
1209template <
class TYPE>
1213, d_isTargetOptional(true)
1217template <
class TYPE>
1222, d_isTargetOptional(false)
1226template <
class TYPE>
1230: d_target_p(original.d_target_p)
1231, d_isTargetOptional(original.d_isTargetOptional)
1236template <
class TYPE>
1241 ? getOpt().has_value()
1245template <
class TYPE>
1249 return !has_value();
1252template <
class TYPE>
1263template <
class TYPE>
1269 ? getOpt().operator->()
1270 : getNAV().operator->();
1273template <
class TYPE>
1279 ? getOpt().operator*()
1280 : getNAV().operator*();
1283#ifdef BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT
1284template <
class TYPE>
1291template <
class TYPE>
1292template <
class ANY_TYPE>
1295 const ANY_TYPE& default_value)
const
1302 return default_value;
1307#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1308template <
class TYPE>
1309template <
class... ARGS>
1320template <
class TYPE>
1326 ? getOpt().operator->()
1327 : getNAV().operator->();
1330template <
class TYPE>
1336 ? getOpt().operator*()
1337 : getNAV().operator*();
1340template <
class TYPE>
1349template <
class TYPE>
1364template <
class TYPE>
1369 if (rhs.has_value()) {
1370 *
this = rhs.value();
1378template <
class TYPE>
1384 if (rhs.has_value()) {
1385 *
this = rhs.value();
1394template <
class TYPE>
1399 if (rhs.has_value()) {
1400 *
this = rhs.value();
1409template <
class TYPE>
1421template <
class TYPE>
1432template <
class TYPE>
1437 return has_value() ? &value() : address;
1440#if !BSLS_COMPILERFEATURES_SIMULATE_CPP11_FEATURES
1441template <
class TYPE>
1442template <
class... ARGS>
1450template <
class TYPE>
1454 return value_or(otherValue);
1457template <
class TYPE>
1461 return has_value() ? &value() : 0;
1465template <
class HASHALG,
class TYPE>
1467 const NullableValueRef<TYPE>& input)
1469 using ::BloombergLP::bslh::hashAppend;
1471 if (!input.has_value()) {
1481template <
class LHS_TYPE,
class RHS_TYPE>
1484 const NullableValueRef<RHS_TYPE>& rhs)
1486 if (
lhs.has_value()) {
1487 return rhs.has_value() ?
lhs.value() ==
rhs.value() :
false;
1490 return !
rhs.has_value();
1493template <
class LHS_TYPE,
class RHS_TYPE>
1496 const RHS_TYPE& rhs)
1498 return lhs.has_value() ?
lhs.value() ==
rhs :
false;
1501template <
class LHS_TYPE,
class RHS_TYPE>
1504 const NullableValueRef<RHS_TYPE>& rhs)
1506 return rhs.has_value() ?
lhs ==
rhs.value():
false;
1509template <
class LHS_TYPE,
class RHS_TYPE>
1512 const NullableValueRef<RHS_TYPE>& rhs)
1514 if (
lhs.has_value()) {
1515 return rhs.has_value() ?
lhs.value() !=
rhs.value() :
true;
1518 return rhs.has_value();
1521template <
class LHS_TYPE,
class RHS_TYPE>
1524 const RHS_TYPE& rhs)
1526 return lhs.has_value() ?
lhs.value() !=
rhs :
true;
1529template <
class LHS_TYPE,
class RHS_TYPE>
1532 const NullableValueRef<RHS_TYPE>& rhs)
1534 return rhs.has_value() ?
lhs !=
rhs.value() :
true;
1537template <
class LHS_TYPE,
class RHS_TYPE>
1540 const NullableValueRef<RHS_TYPE>& rhs)
1542 if (!
rhs.has_value()) {
1546 return lhs.has_value() ?
lhs.value() <
rhs.value() :
true;
1549template <
class LHS_TYPE,
class RHS_TYPE>
1552 const RHS_TYPE& rhs)
1554 return lhs.has_value() ?
lhs.value() <
rhs :
true;
1557template <
class LHS_TYPE,
class RHS_TYPE>
1560 const NullableValueRef<RHS_TYPE>& rhs)
1562 return rhs.has_value() ?
lhs <
rhs.value() :
false;
1565template <
class LHS_TYPE,
class RHS_TYPE>
1568 const NullableValueRef<RHS_TYPE>& rhs)
1570 if (!
lhs.has_value()) {
1574 return rhs.has_value() ?
lhs.value() <=
rhs.value() :
false;
1577template <
class LHS_TYPE,
class RHS_TYPE>
1580 const RHS_TYPE& rhs)
1582 return lhs.has_value() ?
lhs.value() <=
rhs :
true;
1585template <
class LHS_TYPE,
class RHS_TYPE>
1588 const NullableValueRef<RHS_TYPE>& rhs)
1590 return rhs.has_value() ?
lhs <=
rhs.value() :
false;
1593template <
class LHS_TYPE,
class RHS_TYPE>
1596 const NullableValueRef<RHS_TYPE>& rhs)
1598 if (!
lhs.has_value()) {
1602 return rhs.has_value() ?
lhs.value() >
rhs.value() :
true;
1605template <
class LHS_TYPE,
class RHS_TYPE>
1608 const RHS_TYPE& rhs)
1610 return lhs.has_value() ?
lhs.value() >
rhs :
false;
1613template <
class LHS_TYPE,
class RHS_TYPE>
1616 const NullableValueRef<RHS_TYPE>& rhs)
1618 return rhs.has_value() ?
lhs >
rhs.value() :
true;
1621template <
class LHS_TYPE,
class RHS_TYPE>
1624 const NullableValueRef<RHS_TYPE>& rhs)
1626 if (!
rhs.has_value()) {
1630 return lhs.has_value() ?
lhs.value() >=
rhs.value() :
false;
1633template <
class LHS_TYPE,
class RHS_TYPE>
1636 const RHS_TYPE& rhs)
1638 return lhs.has_value() ?
lhs.value() >=
rhs :
false;
1641template <
class LHS_TYPE,
class RHS_TYPE>
1644 const NullableValueRef<RHS_TYPE>& rhs)
1646 return rhs.has_value() ?
lhs >=
rhs.value() :
true;
1653template <
class TYPE>
1658 return !
lhs.has_value();
1661template <
class TYPE>
1667 return !
rhs.has_value();
1670template <
class TYPE>
1674 return lhs.has_value();
1677template <
class TYPE>
1683 return rhs.has_value();
1686template <
class TYPE>
1694template <
class TYPE>
1700 return rhs.has_value();
1703template <
class TYPE>
1708 return lhs.has_value();
1711template <
class TYPE>
1719template <
class TYPE>
1724 return !
lhs.has_value();
1727template <
class TYPE>
1736template <
class TYPE>
1744template <
class TYPE>
1750 return !
rhs.has_value();
1758template <
class TYPE>
1764 return *
static_cast<const NullableAllocatedValue<value_type> *
>(
1768template <
class TYPE>
1777template <
class TYPE>
1781 return d_isTargetOptional;
1785template <
class TYPE>
1790, d_isTargetOptional(true)
1794template <
class TYPE>
1799, d_isTargetOptional(false)
1803template <
class TYPE>
1807: d_target_p(ref.d_target_p)
1808, d_isTargetOptional(ref.d_isTargetOptional)
1812template <
class TYPE>
1816: d_target_p(original.d_target_p)
1817, d_isTargetOptional(original.d_isTargetOptional)
1822template <
class TYPE>
1828 ? getOpt().has_value()
1832template <
class TYPE>
1837 return !has_value();
1840template <
class TYPE>
1851template <
class TYPE>
1857 ? getOpt().operator->()
1858 : getNAV().operator->();
1861template <
class TYPE>
1867 ? getOpt().operator*()
1868 : getNAV().operator*();
1871#ifdef BSLS_COMPILERFEATURES_SUPPORT_OPERATOR_EXPLICIT
1872template <
class TYPE>
1879template <
class TYPE>
1880template <
class ANY_TYPE>
1883 const ANY_TYPE& default_value)
const
1890 return default_value;
1894template <
class TYPE>
1899 return has_value() ? &value() : address;
1902template <
class TYPE>
1907 return value_or(otherValue);
1910template <
class TYPE>
1914 return has_value() ? &value() : 0;
1918template <
class HASHALG,
class TYPE>
1920 const ConstNullableValueRef<TYPE>& input)
1922 using ::BloombergLP::bslh::hashAppend;
1924 if (!input.has_value()) {
1934template <
class LHS_TYPE,
class RHS_TYPE>
1937 const ConstNullableValueRef<RHS_TYPE>& rhs)
1939 if (
lhs.has_value()) {
1940 return rhs.has_value() ?
lhs.value() ==
rhs.value() :
false;
1943 return !
rhs.has_value();
1946template <
class LHS_TYPE,
class RHS_TYPE>
1949 const RHS_TYPE& rhs)
1951 return lhs.has_value() ?
lhs.value() ==
rhs :
false;
1954template <
class LHS_TYPE,
class RHS_TYPE>
1957 const ConstNullableValueRef<RHS_TYPE>& rhs)
1959 return rhs.has_value() ?
lhs ==
rhs.value():
false;
1962template <
class LHS_TYPE,
class RHS_TYPE>
1965 const ConstNullableValueRef<RHS_TYPE>& rhs)
1967 if (
lhs.has_value()) {
1968 return rhs.has_value() ?
lhs.value() !=
rhs.value() :
true;
1971 return rhs.has_value();
1974template <
class LHS_TYPE,
class RHS_TYPE>
1977 const RHS_TYPE& rhs)
1979 return lhs.has_value() ?
lhs.value() !=
rhs :
true;
1982template <
class LHS_TYPE,
class RHS_TYPE>
1985 const ConstNullableValueRef<RHS_TYPE>& rhs)
1987 return rhs.has_value() ?
lhs !=
rhs.value() :
true;
1990template <
class LHS_TYPE,
class RHS_TYPE>
1993 const ConstNullableValueRef<RHS_TYPE>& rhs)
1995 if (!
rhs.has_value()) {
1999 return lhs.has_value() ?
lhs.value() <
rhs.value() :
true;
2002template <
class LHS_TYPE,
class RHS_TYPE>
2005 const RHS_TYPE& rhs)
2007 return lhs.has_value() ?
lhs.value() <
rhs :
true;
2010template <
class LHS_TYPE,
class RHS_TYPE>
2013 const ConstNullableValueRef<RHS_TYPE>& rhs)
2015 return rhs.has_value() ?
lhs <
rhs.value() :
false;
2018template <
class LHS_TYPE,
class RHS_TYPE>
2021 const ConstNullableValueRef<RHS_TYPE>& rhs)
2023 if (!
lhs.has_value()) {
2027 return rhs.has_value() ?
lhs.value() <=
rhs.value() :
false;
2030template <
class LHS_TYPE,
class RHS_TYPE>
2033 const RHS_TYPE& rhs)
2035 return lhs.has_value() ?
lhs.value() <=
rhs :
true;
2038template <
class LHS_TYPE,
class RHS_TYPE>
2041 const ConstNullableValueRef<RHS_TYPE>& rhs)
2043 return rhs.has_value() ?
lhs <=
rhs.value() :
false;
2046template <
class LHS_TYPE,
class RHS_TYPE>
2049 const ConstNullableValueRef<RHS_TYPE>& rhs)
2051 if (!
lhs.has_value()) {
2055 return rhs.has_value() ?
lhs.value() >
rhs.value() :
true;
2058template <
class LHS_TYPE,
class RHS_TYPE>
2061 const RHS_TYPE& rhs)
2063 return lhs.has_value() ?
lhs.value() >
rhs :
false;
2066template <
class LHS_TYPE,
class RHS_TYPE>
2069 const ConstNullableValueRef<RHS_TYPE>& rhs)
2071 return rhs.has_value() ?
lhs >
rhs.value() :
true;
2074template <
class LHS_TYPE,
class RHS_TYPE>
2077 const ConstNullableValueRef<RHS_TYPE>& rhs)
2079 if (!
rhs.has_value()) {
2083 return lhs.has_value() ?
lhs.value() >=
rhs.value() :
false;
2086template <
class LHS_TYPE,
class RHS_TYPE>
2089 const RHS_TYPE& rhs)
2091 return lhs.has_value() ?
lhs.value() >=
rhs :
false;
2094template <
class LHS_TYPE,
class RHS_TYPE>
2097 const ConstNullableValueRef<RHS_TYPE>& rhs)
2099 return rhs.has_value() ?
lhs >=
rhs.value() :
true;
2106template <
class TYPE>
2111 return !
lhs.has_value();
2114template <
class TYPE>
2120 return !
rhs.has_value();
2123template <
class TYPE>
2127 return lhs.has_value();
2130template <
class TYPE>
2136 return rhs.has_value();
2139template <
class TYPE>
2147template <
class TYPE>
2153 return rhs.has_value();
2156template <
class TYPE>
2161 return lhs.has_value();
2164template <
class TYPE>
2173template <
class TYPE>
2178 return !
lhs.has_value();
2181template <
class TYPE>
2190template <
class TYPE>
2198template <
class TYPE>
2204 return !
rhs.has_value();
2211template <
class LHS_TYPE,
class RHS_TYPE>
2214 const NullableValueRef<RHS_TYPE>& rhs)
2216 if (
lhs.has_value()) {
2217 return rhs.has_value() ?
lhs.value() ==
rhs.value() :
false;
2220 return !
rhs.has_value();
2223template <
class LHS_TYPE,
class RHS_TYPE>
2226 const ConstNullableValueRef<RHS_TYPE>& rhs)
2228 if (
lhs.has_value()) {
2229 return rhs.has_value() ?
lhs.value() ==
rhs.value() :
false;
2232 return !
rhs.has_value();
2235template <
class LHS_TYPE,
class RHS_TYPE>
2238 const NullableValueRef<RHS_TYPE>& rhs)
2240 if (
lhs.has_value()) {
2241 return rhs.has_value() ?
lhs.value() !=
rhs.value() :
true;
2244 return rhs.has_value();
2247template <
class LHS_TYPE,
class RHS_TYPE>
2250 const ConstNullableValueRef<RHS_TYPE>& rhs)
2252 if (
lhs.has_value()) {
2253 return rhs.has_value() ?
lhs.value() !=
rhs.value() :
true;
2256 return rhs.has_value();
2259template <
class LHS_TYPE,
class RHS_TYPE>
2262 const NullableValueRef<RHS_TYPE>& rhs)
2264 if (!
rhs.has_value()) {
2268 return lhs.has_value() ?
lhs.value() <
rhs.value() :
true;
2271template <
class LHS_TYPE,
class RHS_TYPE>
2274 const ConstNullableValueRef<RHS_TYPE>& rhs)
2276 if (!
rhs.has_value()) {
2280 return lhs.has_value() ?
lhs.value() <
rhs.value() :
true;
2283template <
class LHS_TYPE,
class RHS_TYPE>
2286 const NullableValueRef<RHS_TYPE>& rhs)
2288 if (!
lhs.has_value()) {
2292 return rhs.has_value() ?
lhs.value() <=
rhs.value() :
false;
2295template <
class LHS_TYPE,
class RHS_TYPE>
2298 const ConstNullableValueRef<RHS_TYPE>& rhs)
2300 if (!
lhs.has_value()) {
2304 return rhs.has_value() ?
lhs.value() <=
rhs.value() :
false;
2307template <
class LHS_TYPE,
class RHS_TYPE>
2310 const NullableValueRef<RHS_TYPE>& rhs)
2312 if (!
lhs.has_value()) {
2316 return rhs.has_value() ?
lhs.value() >
rhs.value() :
true;
2319template <
class LHS_TYPE,
class RHS_TYPE>
2322 const ConstNullableValueRef<RHS_TYPE>& rhs)
2324 if (!
lhs.has_value()) {
2328 return rhs.has_value() ?
lhs.value() >
rhs.value() :
true;
2331template <
class LHS_TYPE,
class RHS_TYPE>
2334 const NullableValueRef<RHS_TYPE>& rhs)
2336 if (!
rhs.has_value()) {
2340 return lhs.has_value() ?
lhs.value() >=
rhs.value() :
false;
2343template <
class LHS_TYPE,
class RHS_TYPE>
2346 const ConstNullableValueRef<RHS_TYPE>& rhs)
2348 if (!
rhs.has_value()) {
2352 return lhs.has_value() ?
lhs.value() >=
rhs.value() :
false;
Definition bdlb_nullablevalueref.h:671
BSLS_DEPRECATE_FEATURE("bdl", "ConstNullableValueRef::addressOr", "Use 'has_value() ? &value() : address' instead") const TYPE *addressOr(const TYPE *address) const
TYPE value_type
Definition bdlb_nullablevalueref.h:726
Definition bdlb_nullableallocatedvalue.h:180
void reset()
Definition bdlb_nullableallocatedvalue.h:1148
bool has_value() const BSLS_KEYWORD_NOEXCEPT
Definition bdlb_nullableallocatedvalue.h:1393
TYPE & emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)...)
TYPE & value()
Definition bdlb_nullableallocatedvalue.h:1183
Definition bdlb_nullablevalueref.h:169
BSLS_DEPRECATE_FEATURE("bdl", "NullableValueRef::valueOr", "Use 'value_or' instead") TYPE valueOr(const TYPE &otherValue) const
TYPE & emplace(BSLS_COMPILERFEATURES_FORWARD_REF(ARGS)...)
TYPE value_type
Definition bdlb_nullablevalueref.h:228
BSLS_DEPRECATE_FEATURE("bdl", "NullableValueRef::makeValueInplace", "Use 'emplace' instead") TYPE &makeValueInplace(ARGS &&... args)
BSLS_DEPRECATE_FEATURE("bdl", "NullableValueRef::addressOr", "Use 'has_value() ? &value() : address' instead") const TYPE *addressOr(const TYPE *address) const
Definition bslstl_optional.h:2043
TYPE value_or(const ANY_TYPE &default_value) const
Definition bdlb_nullablevalueref.h:1294
void reset()
Definition bdlb_nullablevalueref.h:1411
TYPE value_or(const ANY_TYPE &default_value) const
Definition bdlb_nullablevalueref.h:1882
const value_type * operator->() const
Definition bdlb_nullablevalueref.h:1266
const value_type * operator->() const
Definition bdlb_nullablevalueref.h:1854
bool has_value() const BSLS_KEYWORD_NOEXCEPT
Return true if the target contains a value, and false otherwise.
Definition bdlb_nullablevalueref.h:1238
NullableValueRef(bsl::optional< TYPE > &opt)
Definition bdlb_nullablevalueref.h:1211
bool has_value() const BSLS_KEYWORD_NOEXCEPT
Return true if the target contains a value, and false otherwise.
Definition bdlb_nullablevalueref.h:1825
const value_type & operator*() const
Definition bdlb_nullablevalueref.h:1864
const value_type & value() const
Definition bdlb_nullablevalueref.h:1255
bool isNull() const BSLS_KEYWORD_NOEXCEPT
Definition bdlb_nullablevalueref.h:1247
bool isNull() const BSLS_KEYWORD_NOEXCEPT
Definition bdlb_nullablevalueref.h:1835
const value_type & operator*() const
Definition bdlb_nullablevalueref.h:1276
NullableValueRef< TYPE > & operator=(const bsl::nullopt_t &)
Definition bdlb_nullablevalueref.h:1343
ConstNullableValueRef(const bsl::optional< TYPE > &opt)
Definition bdlb_nullablevalueref.h:1787
const value_type & value() const
Definition bdlb_nullablevalueref.h:1843
#define BSLMF_ASSERT(expr)
Definition bslmf_assert.h:231
#define BSLS_ASSERT(X)
Definition bsls_assert.h:1976
#define BSLS_COMPILERFEATURES_FORWARD_REF(T)
Definition bsls_compilerfeatures.h:2343
#define BSLS_COMPILERFEATURES_FORWARD(T, V)
Definition bsls_compilerfeatures.h:2349
#define BSLS_DEPRECATE_FEATURE(UOR, FEATURE, MESSAGE)
Definition bsls_deprecatefeature.h:387
#define BSLS_NOTHROW_SPEC
Definition bsls_exceptionutil.h:386
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_EXPLICIT
Definition bsls_keyword.h:683
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition bdlb_algorithmworkaroundutil.h:74
bool operator!=(const BigEndianInt16 &lhs, const BigEndianInt16 &rhs)
bool operator>=(const Guid &lhs, const Guid &rhs)
void hashAppend(HASH_ALGORITHM &hashAlgorithm, const BigEndianInt16 &object)
bool operator<=(const Guid &lhs, const Guid &rhs)
bool operator>(const Guid &lhs, const Guid &rhs)
bool operator<(const Guid &lhs, const Guid &rhs)
bool operator==(const BigEndianInt16 &lhs, const BigEndianInt16 &rhs)
Definition bdlat_valuetypefunctions.h:939
ALLOCATOR const STRING_VIEW_LIKE_TYPE & rhs
Definition bslstl_string.h:3918
ALLOCATOR & lhs
Definition bslstl_string.h:3917
Definition bslmf_issame.h:146
Definition bslstl_optional.h:522