Menu

- Learn
- Documentation
  - Language Reference
  - Library Reference
  - Command-line Reference
  - Feature Overview
  - Articles
- Downloads
- Packages
- Community
  - Blog
  - Orgs using D
  - Twitter
  - Calendar
  - Forums
  - IRC
  - Community Discord
  - Wiki
  - GitHub
  - Issues
  - Get involved
  - Contributors
  - Foundation
  - Security Team
  - Donate
  - Sponsors
- Resources
  - Tour
  - Books
  - Tutorials
  - Tools
  - Editors
  - IDEs
  - run.dlang.io
  - Visual D
  - Acknowledgments
  - D Style
  - Glossary
  - Sitemap

Search
Report a bug
If you spot a problem with this page, click here to create a Bugzilla issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page. Requires a signed-in GitHub account. This works well for small changes. If you'd like to make larger changes you may want to consider using a local clone.

# std.container.util

This module contains some common utilities used by containers.
This module is a submodule of std.container.

Source std/container/util.d

License:
Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at boost.org/LICENSE_1_0.txt).
Authors:
Andrei Alexandrescu

template `make`(T) if (is(T == struct) || is(T == class))
  Returns an initialized object. This function is mainly for eliminating construction differences between structs and classes. It allows code to not worry about whether the type it's constructing is a struct or a class.
  Examples:

      import std.algorithm.comparison : equal;
      import std.container;

      auto arr = make!(Array!int)([4, 2, 3, 1]);
      assert(equal(arr[], [4, 2, 3, 1]));

      auto rbt = make!(RedBlackTree!(int, "a > b"))([4, 2, 3, 1]);
      assert(equal(rbt[], [4, 3, 2, 1]));

      alias makeList = make!(SList!int);
      auto slist = makeList(1, 2, 3);
      assert(equal(slist[], [1, 2, 3]));

template `make`(alias Container, Args...) if (!is(Container))
  Convenience function for constructing a generic container.
  Examples:
  forbid construction from infinite range

      import std.container.array : Array;
      import std.range : only, repeat;
      import std.range.primitives : isInfinite;
      static assert(__traits(compiles, { auto arr = make!Array(only(5)); }));
      static assert(!__traits(compiles, { auto arr = make!Array(repeat(5)); }));

  Examples:

      import std.algorithm.comparison : equal;
      import std.container.array, std.container.rbtree, std.container.slist;
      import std.range : iota;

      auto arr = make!Array(iota(5));
      assert(equal(arr[], [0, 1, 2, 3, 4]));

      auto rbtmax = make!(RedBlackTree, "a > b")(iota(5));
      assert(equal(rbtmax[], [4, 3, 2, 1, 0]));

      auto rbtmin = make!RedBlackTree(4, 1, 3, 2);
      assert(equal(rbtmin[], [1, 2, 3, 4]));

      alias makeList = make!SList;
      auto list = makeList(1, 7, 42);
      assert(equal(list[], [1, 7, 42]));

Copyright © 1999-2022 by the D Language Foundation | Page generated by Ddoc on Sat Sep 10 10:04:16 2022