diff options
Diffstat (limited to 'src/third_party/boost-1.56.0/libs/utility/value_init_workaround_test.cpp')
-rw-r--r-- | src/third_party/boost-1.56.0/libs/utility/value_init_workaround_test.cpp | 144 |
1 files changed, 0 insertions, 144 deletions
diff --git a/src/third_party/boost-1.56.0/libs/utility/value_init_workaround_test.cpp b/src/third_party/boost-1.56.0/libs/utility/value_init_workaround_test.cpp deleted file mode 100644 index 190c26744d3..00000000000 --- a/src/third_party/boost-1.56.0/libs/utility/value_init_workaround_test.cpp +++ /dev/null @@ -1,144 +0,0 @@ -// Copyright 2010, Niels Dekker. -// -// Distributed under 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) -// -// Test program for the boost::value_initialized<T> workaround. -// -// 17 June 2010 (Created) Niels Dekker - -// Switch the workaround off, before inluding "value_init.hpp". -#define BOOST_DETAIL_VALUE_INIT_WORKAROUND 0 -#include <boost/utility/value_init.hpp> - -#include <iostream> // For cout. -#include <cstdlib> // For EXIT_SUCCESS and EXIT_FAILURE. - -namespace -{ - struct empty_struct - { - }; - - // A POD aggregate struct derived from an empty struct. - // Similar to struct Foo1 from Microsoft Visual C++ bug report 484295, - // "VC++ does not value-initialize members of derived classes without - // user-declared constructor", reported in 2009 by Sylvester Hesp: - // https://connect.microsoft.com/VisualStudio/feedback/details/484295 - struct derived_struct: empty_struct - { - int data; - }; - - bool is_value_initialized(const derived_struct& arg) - { - return arg.data == 0; - } - - - class virtual_destructor_holder - { - public: - int i; - virtual ~virtual_destructor_holder() - { - } - }; - - bool is_value_initialized(const virtual_destructor_holder& arg) - { - return arg.i == 0; - } - - // Equivalent to the Stats class from GCC Bug 33916, - // "Default constructor fails to initialize array members", reported in 2007 by - // Michael Elizabeth Chastain: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 - // and fixed for GCC 4.2.4. - class private_int_array_pair - { - friend bool is_value_initialized(const private_int_array_pair& arg); - private: - int first[12]; - int second[12]; - }; - - bool is_value_initialized(const private_int_array_pair& arg) - { - for ( unsigned i = 0; i < 12; ++i) - { - if ( (arg.first[i] != 0) || (arg.second[i] != 0) ) - { - return false; - } - } - return true; - } - - template <typename T> - bool is_value_initialized(const T(& arg)[2]) - { - return - is_value_initialized(arg[0]) && - is_value_initialized(arg[1]); - } - - template <typename T> - bool is_value_initialized(const boost::value_initialized<T>& arg) - { - return is_value_initialized(arg.data()); - } - - // Returns zero when the specified object is value-initializated, and one otherwise. - // Prints a message to standard output if the value-initialization has failed. - template <class T> - unsigned failed_to_value_initialized(const T& object, const char *const object_name) - { - if ( is_value_initialized(object) ) - { - return 0u; - } - else - { - std::cout << "Note: Failed to value-initialize " << object_name << '.' << std::endl; - return 1u; - } - } - -// A macro that passed both the name and the value of the specified object to -// the function above here. -#define FAILED_TO_VALUE_INITIALIZE(value) failed_to_value_initialized(value, #value) - - // Equivalent to the dirty_stack() function from GCC Bug 33916, - // "Default constructor fails to initialize array members", reported in 2007 by - // Michael Elizabeth Chastain: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=33916 - void dirty_stack() - { - unsigned char array_on_stack[4096]; - for (unsigned i = 0; i < sizeof(array_on_stack); ++i) - { - array_on_stack[i] = 0x11; - } - } - -} - - -int main() -{ - dirty_stack(); - - // TODO More types may be added later. - const unsigned num_failures = - FAILED_TO_VALUE_INITIALIZE(boost::value_initialized<derived_struct>()) + - FAILED_TO_VALUE_INITIALIZE(boost::value_initialized<virtual_destructor_holder[2]>()) + - FAILED_TO_VALUE_INITIALIZE(boost::value_initialized<private_int_array_pair>()); - -#ifdef BOOST_DETAIL_VALUE_INIT_WORKAROUND_SUGGESTED - // One or more failures are expected. - return num_failures > 0 ? EXIT_SUCCESS : EXIT_FAILURE; -#else - // No failures are expected. - return num_failures == 0 ? EXIT_SUCCESS : EXIT_FAILURE; -#endif -} |