Freundlich's C++ toolkit
Older Changes

Changes from 1.4.0 to 1.5.0

Added functionality

Changed functionality


Changes from 1.3.0 to 1.4.0

General changes

  • At least CMake-3.0 is now required.
  • Fixed upcoming clang-3.7 warnings when std::move can be omitted from return statements.

Added functionality

Changed functionality


  • Use standard iterator categories instead of boost iterator categories. The latter do not derive from the former and generally break algorithms that test for them.
  • Fix std::swap includes to conform to C++11.

Changes from 1.2.0 to 1.3.0

General changes

  • Ignore -Wdeprecated-declarations in external headers.

Added functionality

Changed functionality

  • fcppt.optional
    • Removed pointer semantics from optional. See Design for a detailed explanation.

    • Also removed reset and assignment of non-lifted values to optionals.

    • Optionals that have been moved from are now always empty.
  • fcppt.variant

    • get has been renamed to get_exn.

  • CMake export names are now used properly. The prepare_config function is no longer needed and has been removed.

Changes from 1.1.0 to 1.2.0

General changes

  • Ignore VC++ warnings about implicitly deleted move ctors and assignment operators in external headers. This goes towards supporting VC++ again, but the 2015 preview still has issues with noexcept.

Added functionality

  • Added fcppt::algorithm::find_by_opt and fcppt::algorithm::find_by_exn.

  • Added fcppt::optional_to_exception.

  • Added element_type typedef to fcppt::optional.

Changed functionality

  • Changed fcppt::algorithm::array_fold_static and fcppt::algorithm::enum_array_fold_static to take function objects that are callable with one parameter instead of zero parameters. This also goes towards supporting VC++ again.

  • Require cast functions from fcppt.casts in fcppt::strong_typedef_construct_cast and fcppt::mpl::integral_cast.

Removed functionality

  • Removed fcppt::io::color which had a very questionable implementation.

  • Removed fcppt::algorithm::copy_n. Use std::copy_n instead.

  • Removed fcppt::math::is_rational which was unused.

  • Removed fcppt::number_multiplexer which was undocumented.

  • Removed fcppt::time::sleep. Use std::this_thread::sleep_for instead.


  • Fixed cmake-3.1.1 warnings about quoting in if statements.

  • Fixed structure_cast functions in math to actually use their conversion functions instead of static_cast.

  • Int ranges where end < begin are now empty.

Changes from 1.0.0 to 1.1.0

General changes

  • enable_ifs that checked for type constraints were replaced by static_asserts.

Added functionality

Changed functionality

  • Changed fcppt::algorithm::find_exn and fcppt::algorithm::find_if_exn to take the exception as a parameter.

  • Changed structure_cast functions of fcppt::math to require a cast function as template parameter.

  • Forward headers were added to vector/static.hpp, dim/static.hpp, matrix/static.hpp, sphere/circle.hpp and box/rect.hpp.

Removed functionality

  • Removed array_hash which was a duplicate of fcppt::range_hash.

  • Removed fcppt::math::vector::slerp.

  • Removed fcppt::algorithm::exception and fcppt::algorithm::element_not_found.


Changes from 0.12.0 to 1.0.0

General changes

  • fcppt now uses C++11 which implies that non-conforming compilers are no longer supported.

New Libraries

  • fcppt.casts

    • Added fcppt.casts which includes casts to replace static_cast.

  • fcppt.enum

    • Added fcppt::enum_max_value, fcppt::enum_size and fcppt::cast_to_enum.

    • Added fcppt::container::enum_array.

    • Added fcppt::enum_range.

    • Added fcppt::runtime_enum.

    • Added fcppt::algorithm::enum_array_fold and fcppt::algorithm::enum_array_fold_static.

  • fcppt.literal

  • fcppt.ref

    • Added fcppt::reference_wrapper which supports incomplete types.

Added functionality

Changed functionality

Removed functionality

  • Features made obsolete by C++11

    • Removed SAFE_BOOL which can be replaced by explicit conversion operators.

    • Removed fcppt::assign::make_array which can be replaced by initializer lists.

    • Removed fcppt::signal::connection_manager which can be replaced by fcppt::signal::connection_container.

    • Removed fcppt::scoped_ptr<T> which can be replaced by std::unique_ptr<T> const.

    • Removed fcppt::make_auto_ptr.

    • Removed fcppt.alignment which is replaced by alignas and alignof.

    • Removed fcppt::container::array. Use std::array instead.

    • Removed fcppt::type_info which is replaced by std::type_index.

    • Removed workarounds.hpp which applied to pre-C++-11 compilers only.

    • Removed fcppt::container::ptr functions and fcppt::algorithm::ptr_container_ease and fcppt::algorithm::ptr_container_erase_if. Ptr containers should be replaced by containers of unique ptrs.

  • Others

    • Removed fcppt::variant::recursive. Recursive variants are inefficient.

    • Removed fcppt.chrono.asio. Asio now supports std::chrono durations and time points.

    • Removed dynamic math classes that we didn't have a usecase for.

    • Removed fcppt::algorithm::copy_if. fcppt::algorithm::map_optional can be used instead.

    • Removed fcppt::container::map which was incomplete and never documented.

    • Removed fcppt::log::global which was unused.

    • Removed FOREACH_ENUMERATOR. Use fcppt::make_enum_range instead.

    • Removed FCPPT_TRY_DYNAMIC_CAST. Use fcppt::cast::try_dynamic instead.

    • Removed fcppt::math::quaterion which was unused.


  • CMake

    • Fix cmake paths so that fcppt can be used via add_subdirectory.

    • Fixed linking to Boost found by testing on Fedora.

    • Fixed FcpptCMakeUtils to not set anything globally.

  • fcppt.math

    • Fixed comparison of different math objects (e.g. a vector and a vector view).

  • fcppt.optional

    • Fixed a bug in fcppt::optional::operator=.

  • fcppt.variant

    • Fixed fcppt::variant::object::operator= when construction throws.

Changes from 0.11.1 to 0.12.0

General changes

  • Expose cmake targets from the build directory and when installing. This should make it a lot easier to use fcppt from other cmake based projects. See Using fcppt

  • Some updates for VC++11, mostly warning fixes.

  • Some updates for gcc-4.8 trunk, also mostly warning fixes.

Added functionality

Removed functionality

  • Removed include_windows.hpp from public includes

  • Removed fcppt.thread. The purpose of fcppt.thread was to provide sleeping with a steady clock and to call terminate on joinable threads upon destruction. Both issues have been fixed in Boost.Thread as of boost-1.52.0


  • Fixed a bug in fcppt::unique_ptr::reset

  • Fixed assigning of math views (like matrix's row view)

  • Reduced smart pointer include dependencies

  • Don't use -pthread if not necessary

  • Prefer newer boost versions over older ones. We also don't set Boost_ADDITIONAL_VERSIONS anymore.

Changes from 0.11 to 0.11.1

This release is mainly a bugfix release.

  • Some documentation fixes.

  • fcppt::algorithm::levenshtein and fcppt::algorithm::shortest_levenshtein now support boost.range and not only containers.


  • Added missing template keywords for clang-3.1

  • Added fcppt::math::interpolation::perlin_fifth_degree function (along with the corresponding functor) which implements Ken Perlin's noise interpolation function.

  • Added fcppt::container::bitfield::object::get and fcppt::container::bitfield::object::static_size for easy integration into other APIs.

  • Ignore -Wextra-semi in Boost headers for clang-3.2 trunk

  • Fixed type problems in bitfield. The size type is now the same as the enum type. The difference type is its signed counterpart.

  • Enabled more warnings in clang if available, namely -Wundef, -Wimplicit-fallthrough, -Wunneeded-member-function, -Wunused-member-function, -Wconditional-uninitialized, -Wunreachable-code.

  • Updates for doxygen-1.8.1

  • Updates for boost-1.50

  • Made fcppt -Wunused-local-typedefs-proof.

Changes from 0.10 to 0.11

General changes

  • Introduced new headers fcppt/config/external_begin.hpp and fcppt/config/external_end.hpp that are used around external includes and disable a lot of warnings. This way it was possible for us to enable many more warnings for fcppt, especially in VC++.

  • Removed convenience headers that included everything in a subsystem. They are not considered good style anyway.

  • Removed trailing whitespaces in the code.

  • Don't use constants with internal linkage anymore.

  • Parts of fcppt that require additional libraries to link to are now split into their own libraries, namely fcppt_filesystem and fcppt_thread.

Added functionality

New Libraries

  • Added a new assert framework

  • Added fcppt::null_ptr which can be used for null pointers to objects.

Additions to existing libraries

Changed functionality

Removed functionality

Removed libraries

  • Removed fcppt::utf8. It is not really implementable without OS support.

  • Removed fcppt::chrono, expect the asio glue code. boost.chrono should be used.

Removed functionality from libraries

  • Removed fcppt::auto_ptr typedef

  • Removed FCPPT_ASSERT and FCPPT_ASSERT_MESSAGE, which were replaced by the new assert framework


  • Removed fcppt::minmax_pair

  • fcppt.endianness

    • Removed fcppt::endianness::copy_n_from_host, fcppt::endianness::copy_n_to_host, fcppt::endianness::copy_n_swapped and fcppt::endianness::copy_swapped, fcppt::endianness::from_big_endian, fcppt::endianness::from_host, fcppt::endianness::from_little_endian, fcppt::endianness::to_big_endian, fcppt::endianness::to_host and fcppt::endianness::to_little_endian.

  • fcppt.filesystem

    • Removed fcppt::filesystem::first_file, fcppt::filesystem::next_file and fcppt::filesystem::skip_directories.

    • Removed fcppt::filesystem::create_directories_recursive, fcppt::filesystem::create_directory, fcppt::filesystem::current_path, fcppt::filesystem::directory_iterator, fcppt::filesystem::exists, fcppt::filesystem::file_size, fcppt::filesystem::is_directory, fcppt::filesystem::is_regular, fcppt::filesystem::path, fcppt::filesystem::readlink, fcppt::filesystem::recursive_directory_iterator, fcppt::filesystem::remove and fcppt::filesystem::remove_filename

    • Removed fcppt::io::cifstream, fcppt::io::cofstream and fcppt::io::cfstream

  • fcppt.math

    • Removed fcppt::math::almost_zero, fcppt;:math::compare, fcppt::math::machine_epsilon, fcppt::math::vector::is_null, fcppt::math::null and all other epsilon comparing functions. A general epsilon cannot be provided and the user must choose one. As a result of this, all comparison functions use ==. It is made sure that they still emit warnings when using -Wfloat-equal.

    • Removed fcppt::math::vector::to_angle, fcppt::math::vector::transform, fcppt::math::vector::unit_circle and fcppt::math::vector::place.

    • Removed fcppt::math::dim::quad and fcppt::math::dim::transform.

    • Removed FCPPT_MATH_INSTANTIATE_ARITHMETIC, fcppt::math::is_negative, fcppt::math::round_div_int, fcppt::math::quad, fcppt::math::inverse and fcppt::math::signum.

    • Removed fcppt::math::matrix::look_at

    • Removed broken overloads of fcppt::math::next_pow_2

  • fcppt.smart_pointers

  • fcppt.string

  • fcppt.strong_typedef

  • fcppt.variant

    • Removed fcppt::variant::apply, use fcppt::variant::apply_unary, fcppt::variant::apply_binary or fcppt::variant::apply_ternary instead.


  • Fixed fcppt::mpl::index_of to only allow types that are part of the sequence. This also fixes invalid uses of fcppt::variant::object::get

  • Fixed fcppt::variant::holds_type when recursive types are involved.

  • Don't overwrite Boost_ADDITIONAL_VERSIONS in cmake, just append to it.

  • Fixed fcppt::algorithm::ptr_container_erase

  • Fixed the iterator category of fcppt::cyclic_iterator

  • Fixed static linking of fcppt

  • Fixed fcppt::math::box::contains_point

  • Made logging a lot less expensive

  • fcppt::variant::apply_unary now has linear complexity instead of quadratic complexity if the variant has been declared using an boost::mpl::list

Changes from 0.9 to 0.10

Added functionality

  • Added math::matrix::is_matrix trait.
  • Added io::stream_to_string that reads the whole content of a stream into a string.
  • Added filesystem::create_directory_exn and filesystem::create_directories_recursive_exn.
  • Added backtrace which can print a stack trace for gcc compiled binaries.
  • Install a new FcpptConfig.cmake file so cmake can find an installed fcppt without FindFcppt.cmake.
  • Added fusion adaptors for container::array.
  • Added utf8::from_std_string.
  • Implemented FCPPT_PP_FUNCTION for VC++.
  • Added support for boost::array to assign::array.
  • Added container::ptr::push_front_unique_ptr.
  • -fvibisibility=hidden is now optional, but still on by default (use FCPPT_ENABLE_VISIBILITY_HIDDEN).
  • Added mpl::append.

Changed functionality

  • Changed the default cmake module installation path to ${CMAKE_ROOT}/Modules if ${CMAKE_INSTALL_PREFIX} is a prefix of ${CMAKE_ROOT}.
  • Replaced utf8::convert by utf8::from_fcppt_string and utf8::to_fcppt_string.
  • random now uses boost::random instead of tr1::random.
  • A 64 bit type is now required for chrono.

Removed functionality

  • Removed boost filesystem v2 support. Boost 1.44 or later is now needed.
  • Removed math::matrix::perspective, math::matrix::orthogonal and math::matrix::orthogonal_xy. Every projection function is only meaningful if you know which canonical view volume you are using.


  • Fixed FCPPT_DYN_LINK behaviour in FindFcppt.cmake.
  • Properly pass QUIETLY and REQUIRED in FindFcppt.cmake.
  • Include Boost_INCLUDE_DIRS rather than Boost_INCLUDE_DIR.
  • Use -pthread for POSIX systems because we use boost.thread and asio.
  • Assert that a type requested via variant::object::get or
    is actually among its possible types.
  • type_traits::is_iterable, TYPE_TRAITS_GENERATE_HAS_MEMBER_FUNCTION and TYPE_TRAITS_GENERATE_HAS_TYPE now properly expose an mpl::bool.
  • The default case of chrono::common_type has been restricted to fundamental types to avoid compiler errors with certain overloaded operators.