/**
 * D header file for interaction with Microsoft C++ <utility>
 *
 * Copyright: Copyright (c) 2018 D Language Foundation
 * License: Distributed under the
 *      $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0).
 *    (See accompanying file LICENSE)
 * Authors:   Manu Evans
 * Source:    $(DRUNTIMESRC core/stdcpp/utility.d)
 */

module core.stdcpp.utility;

import core.stdcpp.xutility : StdNamespace;

extern(C++, (StdNamespace)):
@nogc:

/**
* D language counterpart to C++ std::pair.
*
* C++ reference: $(LINK2 https://en.cppreference.com/w/cpp/utility/pair)
*/
struct pair(T1, T2)
{
    ///
    alias first_type = T1;
    ///
    alias second_type = T2;

    ///
    T1 first;
    ///
    T2 second;

    // FreeBSD has pair as non-POD so add a contructor
    version (FreeBSD)
    {
        this(T1 t1, T2 t2) inout
        {
            first  = t1;
            second = t2;
        }
        this(ref return scope inout pair!(T1, T2) src) inout
        {
            first  = src.first;
            second = src.second;
        }
    }
}