//=========================================================================
//  Copyright (c) Kitware, Inc.
//  All rights reserved.
//  See LICENSE.txt for details.
//
//  This software is distributed WITHOUT ANY WARRANTY; without even
//  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
//  PURPOSE.  See the above copyright notice for more information.
//=========================================================================

#ifndef smtk_Function_h
#define smtk_Function_h

@FUNCTION_TYPE_HEADERS@

#if defined(_MSC_VER) && _MSC_VER >= 1800
#define SMTK_FUNCTION_INIT nullptr
#else
#define SMTK_FUNCTION_INIT NULL
#endif

/**! \file Function.h
  * \brief Aliases to make function, bind, bind2nd, and placeholders platform-independent.
  */
namespace smtk
{
  /// Bring the platform's std::function equivalent into the smtk namespace.
  using @FUNCTION_NAMESPACE@::function;

  /// Bring the platform's std::bind equivalent into the smtk namespace.
  using @FUNCTION_NAMESPACE@::bind;

  /// Alias for std::placeholders or boost::placeholders, depending on platform.
  namespace placeholders
    {
    /// Bring the platform's std::placeholders equivalent into the smtk namespace.
    ///@{
    @USING_PLACEHOLDERS@
    // TODO: We should detect _N and use it rather than a
    // fixed number. SMTK itself only uses 2 bound arguments.
    ///@}
    }
}

#endif /* smtk_Function_h */
