mirror of
https://github.com/boostorg/core.git
synced 2025-05-09 23:03:54 +00:00
boost/utility.hpp: - Include boost/utility/addressof.hpp
boost/utility/addressof.hpp: - addressof() implementation libs/utility/utility.htm: - Document addressof libs/utility/addressof_test.cpp: - Test addressof() [SVN r13414]
This commit is contained in:
parent
7cc6436afc
commit
380e34f2be
46
addressof_test.cpp
Normal file
46
addressof_test.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
// Copyright (C) 2002 Brad King (brad.king@kitware.com)
|
||||
// Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#define BOOST_INCLUDE_MAIN
|
||||
#include <boost/test/test_tools.hpp>
|
||||
#include <boost/utility.hpp>
|
||||
|
||||
struct useless_type {};
|
||||
|
||||
class nonaddressable {
|
||||
public:
|
||||
void dummy(); // Silence GCC warning: all member of class are private
|
||||
|
||||
private:
|
||||
useless_type operator&() const;
|
||||
};
|
||||
|
||||
int test_main(int, char*[])
|
||||
{
|
||||
nonaddressable* px = new nonaddressable();
|
||||
|
||||
nonaddressable& x = *px;
|
||||
BOOST_TEST(boost::addressof(x) == px);
|
||||
|
||||
const nonaddressable& cx = *px;
|
||||
BOOST_TEST(boost::addressof(cx) == static_cast<const nonaddressable*>(px));
|
||||
|
||||
volatile nonaddressable& vx = *px;
|
||||
BOOST_TEST(boost::addressof(vx) == static_cast<volatile nonaddressable*>(px));
|
||||
|
||||
const volatile nonaddressable& cvx = *px;
|
||||
BOOST_TEST(boost::addressof(cvx) == static_cast<const volatile nonaddressable*>(px));
|
||||
|
||||
return 0;
|
||||
}
|
53
include/boost/utility/addressof.hpp
Normal file
53
include/boost/utility/addressof.hpp
Normal file
@ -0,0 +1,53 @@
|
||||
// Copyright (C) 2002 Brad King (brad.king@kitware.com)
|
||||
// Doug Gregor (gregod@cs.rpi.edu)
|
||||
//
|
||||
// Permission to copy, use, sell and distribute this software is granted
|
||||
// provided this copyright notice appears in all copies.
|
||||
// Permission to modify the code and to distribute modified code is granted
|
||||
// provided this copyright notice appears in all copies, and a notice
|
||||
// that the code was modified is included with the copyright notice.
|
||||
//
|
||||
// This software is provided "as is" without express or implied warranty,
|
||||
// and with no claim as to its suitability for any purpose.
|
||||
|
||||
// For more information, see http://www.boost.org
|
||||
|
||||
#ifndef BOOST_UTILITY_ADDRESSOF_HPP
|
||||
#define BOOST_UTILITY_ADDRESSOF_HPP
|
||||
|
||||
namespace boost {
|
||||
|
||||
template <typename T>
|
||||
inline T* addressof(T& v)
|
||||
{
|
||||
struct addressof_helper {};
|
||||
return reinterpret_cast<T*>(&reinterpret_cast<addressof_helper&>(v));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline const T* addressof(const T& v)
|
||||
{
|
||||
struct addressof_helper {};
|
||||
return reinterpret_cast<const T*>(
|
||||
&reinterpret_cast<const addressof_helper&>(v));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline volatile T* addressof(volatile T& v)
|
||||
{
|
||||
struct addressof_helper {};
|
||||
return reinterpret_cast<volatile T*>(
|
||||
&reinterpret_cast<volatile addressof_helper&>(v));
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
inline const volatile T* addressof(const volatile T& v)
|
||||
{
|
||||
struct addressof_helper {};
|
||||
return reinterpret_cast<const volatile T*>(
|
||||
&reinterpret_cast<const volatile addressof_helper&>(v));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif // BOOST_UTILITY_ADDRESSOF_HPP
|
Loading…
x
Reference in New Issue
Block a user