54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
/*=============================================================================
|
|
Copyright (c) 2007 Tobias Schwinger
|
|
|
|
Use modification and distribution are subject to the Boost Software
|
|
License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
|
http://www.boost.org/LICENSE_1_0.txt).
|
|
==============================================================================*/
|
|
|
|
#include <boost/functional/factory.hpp>
|
|
#include <boost/core/lightweight_test.hpp>
|
|
|
|
#include <memory>
|
|
|
|
class sum
|
|
{
|
|
int val_sum;
|
|
public:
|
|
sum(int a, int b) : val_sum(a + b) { }
|
|
|
|
operator int() const { return this->val_sum; }
|
|
};
|
|
|
|
// Suppress warnings about std::auto_ptr.
|
|
#if defined(__clang__)
|
|
#pragma clang diagnostic push
|
|
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
|
#endif
|
|
|
|
int main()
|
|
{
|
|
int one = 1, two = 2;
|
|
{
|
|
sum* instance( boost::factory< sum* >()(one,two) );
|
|
BOOST_TEST(*instance == 3);
|
|
}
|
|
#if !defined(BOOST_NO_AUTO_PTR)
|
|
{
|
|
std::auto_ptr<sum> instance( boost::factory< std::auto_ptr<sum> >()(one,two) );
|
|
BOOST_TEST(*instance == 3);
|
|
}
|
|
#endif
|
|
#if !defined(BOOST_NO_CXX11_SMART_PTR)
|
|
{
|
|
std::unique_ptr<sum> instance( boost::factory< std::unique_ptr<sum> >()(one,two) );
|
|
BOOST_TEST(*instance == 3);
|
|
}
|
|
#endif
|
|
return boost::report_errors();
|
|
}
|
|
|
|
#if defined(__clang__)
|
|
#pragma clang diagnostic pop
|
|
#endif
|