text: ///////////////////////////////////////////////////////////////////////////////////////////////////
  //
  // Idlib: A C++ utility library
  // Copyright (C) 2017-2018 Michael Heilmann
  //
  // This software is provided 'as-is', without any express or implied warranty.
  // In no event will the authors be held liable for any damages arising from the use of this software.
  //
  // Permission is granted to anyone to use this software for any purpose,
  // including commercial applications, and to alter it and redistribute it freely,
  // subject to the following restrictions:
  //
  // 1. The origin of this software must not be misrepresented;
  //    you must not claim that you wrote the original software.
  //    If you use this software in a product, an acknowledgment
  //    in the product documentation would be appreciated but is not required.
  //
  // 2. Altered source versions must be plainly marked as such,
  //    and must not be misrepresented as being the original software.
  //
  // 3. This notice may not be removed or altered from any source distribution.
  //
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  
  #pragma once
  
  namespace idlib {
  
  template <typename T, typename Enabled = void>
  struct min_element_functor;
  
  /// @brief Determine the least component value of a matrix, point, or vector.
  /// @tparam T the matrix, point, or vector type
  /// @param v the value of type T of which the least component value is determined
  /// @return the least component value
  template <typename T>
  auto min_element(const T& v) -> decltype(min_element_functor<T>()(v))
  { return min_element_functor<T>()(v); }
  
  } // namespace idlib
  