text: //
  // Copyright 2012 Christian Henning, Andreas Pokorny, Lubomir Bourdev
  //
  // 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
  //
  #ifndef BOOST_GIL_EXTENSION_TOOLBOX_METAFUNCTIONS_GET_PIXEL_TYPE_HPP
  #define BOOST_GIL_EXTENSION_TOOLBOX_METAFUNCTIONS_GET_PIXEL_TYPE_HPP
  
  #include <boost/gil/extension/toolbox/dynamic_images.hpp>
  #include <boost/gil/extension/toolbox/metafunctions/is_bit_aligned.hpp>
  
  #include <boost/gil/detail/mp11.hpp>
  
  namespace boost{ namespace gil {
  
  /// get_pixel_type metafunction
  /// \brief Depending on Image this function generates either
  ///        the pixel type or the reference type in case
  ///        the image is bit_aligned.
  template<typename View>
  struct get_pixel_type
  {
      using type = mp11::mp_if
          <
              is_bit_aligned<typename View::value_type>,
              typename View::reference,
              typename View::value_type
          >;
  };
  
  template<typename Views>
  struct get_pixel_type<any_image_view<Views>>
  {
      using type = any_image_pixel_t;
  };
  
  }} // namespace boost::gil
  
  #endif
  