8#ifndef INCLUDED_BSLS_UTIL
9#define INCLUDED_BSLS_UTIL
158#include <bsls_compilerfeatures.h>
181#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
183struct Util_RemoveReference {
188struct Util_RemoveReference<TYPE&> {
193struct Util_RemoveReference<TYPE&&> {
198struct Util_AssertNotLvalue {
203struct Util_AssertNotLvalue<TYPE&> {
205 "Cannot forward an rvalue as an lvalue.");
231 template <
class TYPE>
240 template <
class RESULT>
243 template <
class RESULT,
class ARG>
246 template <
class RESULT,
class ARG1,
class ARG2>
249 RESULT (&fn)(ARG1, ARG2));
251#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
252 template <
class TYPE>
255 TYPE&& forward(
typename Util_RemoveReference<TYPE>::type& t)
267 template <
class TYPE>
270 TYPE&& forward(
typename Util_RemoveReference<TYPE>::type&& t)
289#ifdef BSLS_PLATFORM_CMP_MSVC
290# define BSLS_UTIL_ADDRESSOF(OBJ) ::BloombergLP::bsls::Util::addressOf(OBJ)
292# if !defined(BDE_USE_ADDRESSOF)
293# define BDE_USE_ADDRESSOF
296# define BSLS_UTIL_ADDRESSOF(OBJ) (&(OBJ))
314 return static_cast<TYPE *
>(
316 const_cast<char *
>(&
reinterpret_cast<const volatile char&
>(obj))));
319template <
class RESULT>
327template <
class RESULT,
class ARG>
335template <
class RESULT,
class ARG1,
class ARG2>
343#ifdef BSLS_COMPILERFEATURES_SUPPORT_RVALUE_REFERENCES
346TYPE&& Util::forward(
typename Util_RemoveReference<TYPE>::type& t)
349 return static_cast<TYPE&&
>(t);
354TYPE&& Util::forward(
typename Util_RemoveReference<TYPE>::type&& t)
357 static_assert(
sizeof(
typename Util_AssertNotLvalue<TYPE>::type) > 0,
358 "Just to trigger instantiation of the checker template.");
359 return static_cast<TYPE&&
>(t);
#define BSLS_IDENT(str)
BSLS_IDENT() - insert string into .comment binary segment (if supported)
Definition bsls_ident.h:238
#define BSLS_KEYWORD_CONSTEXPR
Definition bsls_keyword.h:624
#define BSLS_KEYWORD_NOEXCEPT
Definition bsls_keyword.h:674
Definition bdlt_iso8601util.h:707
Definition bsls_util.h:176
TYPE type
Definition bsls_util.h:178
Definition bsls_util.h:219
static TYPE * addressOf(TYPE &obj)
Definition bsls_util.h:312