Sophie

Sophie

distrib > Mageia > 6 > armv7hl > media > core-updates > by-pkgid > 4e2dbb669434a7691662cb2f0ad38972 > files > 15364

rust-doc-1.28.0-1.mga6.armv7hl.rpm

<!DOCTYPE HTML>
<html lang="en" class="sidebar-visible no-js">
    <head>
        <!-- Book generated using mdBook -->
        <meta charset="UTF-8">
        <title>generators - </title>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
        <meta name="description" content="">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <meta name="theme-color" content="#ffffff" />

        <base href="../">

        <link rel="stylesheet" href="book.css">
        <link href="https://fonts.googleapis.com/css?family=Open+Sans:300italic,400italic,600italic,700italic,800italic,400,300,600,700,800" rel="stylesheet" type="text/css">
        <link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500" rel="stylesheet" type="text/css">

        <link rel="shortcut icon" href="favicon.png">

        <!-- Font Awesome -->
        <link rel="stylesheet" href="_FontAwesome/css/font-awesome.css">

        <link rel="stylesheet" href="highlight.css">
        <link rel="stylesheet" href="tomorrow-night.css">
        <link rel="stylesheet" href="ayu-highlight.css">

        <!-- Custom theme stylesheets -->
        

        

    </head>
    <body class="light">
        <!-- Work around some values being stored in localStorage wrapped in quotes -->
        <script type="text/javascript">
            try {
                var theme = localStorage.getItem('mdbook-theme');
                var sidebar = localStorage.getItem('mdbook-sidebar');

                if (theme.startsWith('"') && theme.endsWith('"')) {
                    localStorage.setItem('mdbook-theme', theme.slice(1, theme.length - 1));
                }

                if (sidebar.startsWith('"') && sidebar.endsWith('"')) {
                    localStorage.setItem('mdbook-sidebar', sidebar.slice(1, sidebar.length - 1));
                }
            } catch (e) { }
        </script>

        <!-- Set the theme before any content is loaded, prevents flash -->
        <script type="text/javascript">
            var theme;
            try { theme = localStorage.getItem('mdbook-theme'); } catch(e) { } 
            if (theme === null || theme === undefined) { theme = 'light'; }
            document.body.className = theme;
            document.querySelector('html').className = theme + ' js';
        </script>

        <!-- Hide / unhide sidebar before it is displayed -->
        <script type="text/javascript">
            var html = document.querySelector('html');
            var sidebar = 'hidden';
            if (document.body.clientWidth >= 1080) {
                try { sidebar = localStorage.getItem('mdbook-sidebar'); } catch(e) { }
                sidebar = sidebar || 'visible';
            }
            html.classList.remove('sidebar-visible');
            html.classList.add("sidebar-" + sidebar);
        </script>

        <nav id="sidebar" class="sidebar" aria-label="Table of contents">
            <ol class="chapter"><li class="affix"><a href="the-unstable-book.html">The Unstable Book</a></li><li><a href="compiler-flags.html"><strong aria-hidden="true">1.</strong> Compiler flags</a></li><li><ol class="section"><li><a href="compiler-flags/linker-flavor.html"><strong aria-hidden="true">1.1.</strong> linker_flavor</a></li><li><a href="compiler-flags/profile.html"><strong aria-hidden="true">1.2.</strong> profile</a></li></ol></li><li><a href="language-features.html"><strong aria-hidden="true">2.</strong> Language features</a></li><li><ol class="section"><li><a href="language-features/aarch64-target-feature.html"><strong aria-hidden="true">2.1.</strong> aarch64_target_feature</a></li><li><a href="language-features/abi-msp430-interrupt.html"><strong aria-hidden="true">2.2.</strong> abi_msp430_interrupt</a></li><li><a href="language-features/abi-ptx.html"><strong aria-hidden="true">2.3.</strong> abi_ptx</a></li><li><a href="language-features/abi-thiscall.html"><strong aria-hidden="true">2.4.</strong> abi_thiscall</a></li><li><a href="language-features/abi-unadjusted.html"><strong aria-hidden="true">2.5.</strong> abi_unadjusted</a></li><li><a href="language-features/abi-vectorcall.html"><strong aria-hidden="true">2.6.</strong> abi_vectorcall</a></li><li><a href="language-features/abi-x86-interrupt.html"><strong aria-hidden="true">2.7.</strong> abi_x86_interrupt</a></li><li><a href="language-features/allocator-internals.html"><strong aria-hidden="true">2.8.</strong> allocator_internals</a></li><li><a href="language-features/allow-fail.html"><strong aria-hidden="true">2.9.</strong> allow_fail</a></li><li><a href="language-features/allow-internal-unsafe.html"><strong aria-hidden="true">2.10.</strong> allow_internal_unsafe</a></li><li><a href="language-features/allow-internal-unstable.html"><strong aria-hidden="true">2.11.</strong> allow_internal_unstable</a></li><li><a href="language-features/arbitrary-self-types.html"><strong aria-hidden="true">2.12.</strong> arbitrary_self_types</a></li><li><a href="language-features/arm-target-feature.html"><strong aria-hidden="true">2.13.</strong> arm_target_feature</a></li><li><a href="language-features/asm.html"><strong aria-hidden="true">2.14.</strong> asm</a></li><li><a href="language-features/associated-type-defaults.html"><strong aria-hidden="true">2.15.</strong> associated_type_defaults</a></li><li><a href="language-features/attr-literals.html"><strong aria-hidden="true">2.16.</strong> attr_literals</a></li><li><a href="language-features/avx512-target-feature.html"><strong aria-hidden="true">2.17.</strong> avx512_target_feature</a></li><li><a href="language-features/box-patterns.html"><strong aria-hidden="true">2.18.</strong> box_patterns</a></li><li><a href="language-features/box-syntax.html"><strong aria-hidden="true">2.19.</strong> box_syntax</a></li><li><a href="language-features/catch-expr.html"><strong aria-hidden="true">2.20.</strong> catch_expr</a></li><li><a href="language-features/cfg-target-has-atomic.html"><strong aria-hidden="true">2.21.</strong> cfg_target_has_atomic</a></li><li><a href="language-features/cfg-target-thread-local.html"><strong aria-hidden="true">2.22.</strong> cfg_target_thread_local</a></li><li><a href="language-features/cfg-target-vendor.html"><strong aria-hidden="true">2.23.</strong> cfg_target_vendor</a></li><li><a href="language-features/compiler-builtins.html"><strong aria-hidden="true">2.24.</strong> compiler_builtins</a></li><li><a href="language-features/concat-idents.html"><strong aria-hidden="true">2.25.</strong> concat_idents</a></li><li><a href="language-features/const-fn.html"><strong aria-hidden="true">2.26.</strong> const_fn</a></li><li><a href="language-features/const-let.html"><strong aria-hidden="true">2.27.</strong> const_let</a></li><li><a href="language-features/crate-in-paths.html"><strong aria-hidden="true">2.28.</strong> crate_in_paths</a></li><li><a href="language-features/crate-visibility-modifier.html"><strong aria-hidden="true">2.29.</strong> crate_visibility_modifier</a></li><li><a href="language-features/custom-attribute.html"><strong aria-hidden="true">2.30.</strong> custom_attribute</a></li><li><a href="language-features/custom-derive.html"><strong aria-hidden="true">2.31.</strong> custom_derive</a></li><li><a href="language-features/decl-macro.html"><strong aria-hidden="true">2.32.</strong> decl_macro</a></li><li><a href="language-features/default-type-parameter-fallback.html"><strong aria-hidden="true">2.33.</strong> default_type_parameter_fallback</a></li><li><a href="language-features/doc-alias.html"><strong aria-hidden="true">2.34.</strong> doc_alias</a></li><li><a href="language-features/doc-cfg.html"><strong aria-hidden="true">2.35.</strong> doc_cfg</a></li><li><a href="language-features/doc-keyword.html"><strong aria-hidden="true">2.36.</strong> doc_keyword</a></li><li><a href="language-features/doc-masked.html"><strong aria-hidden="true">2.37.</strong> doc_masked</a></li><li><a href="language-features/doc-spotlight.html"><strong aria-hidden="true">2.38.</strong> doc_spotlight</a></li><li><a href="language-features/dropck-eyepatch.html"><strong aria-hidden="true">2.39.</strong> dropck_eyepatch</a></li><li><a href="language-features/dropck-parametricity.html"><strong aria-hidden="true">2.40.</strong> dropck_parametricity</a></li><li><a href="language-features/exclusive-range-pattern.html"><strong aria-hidden="true">2.41.</strong> exclusive_range_pattern</a></li><li><a href="language-features/exhaustive-patterns.html"><strong aria-hidden="true">2.42.</strong> exhaustive_patterns</a></li><li><a href="language-features/extern-absolute-paths.html"><strong aria-hidden="true">2.43.</strong> extern_absolute_paths</a></li><li><a href="language-features/extern-in-paths.html"><strong aria-hidden="true">2.44.</strong> extern_in_paths</a></li><li><a href="language-features/extern-prelude.html"><strong aria-hidden="true">2.45.</strong> extern_prelude</a></li><li><a href="language-features/extern-types.html"><strong aria-hidden="true">2.46.</strong> extern_types</a></li><li><a href="language-features/external-doc.html"><strong aria-hidden="true">2.47.</strong> external_doc</a></li><li><a href="language-features/fundamental.html"><strong aria-hidden="true">2.48.</strong> fundamental</a></li><li><a href="language-features/generators.html" class="active"><strong aria-hidden="true">2.49.</strong> generators</a></li><li><a href="language-features/generic-associated-types.html"><strong aria-hidden="true">2.50.</strong> generic_associated_types</a></li><li><a href="language-features/global-asm.html"><strong aria-hidden="true">2.51.</strong> global_asm</a></li><li><a href="language-features/hexagon-target-feature.html"><strong aria-hidden="true">2.52.</strong> hexagon_target_feature</a></li><li><a href="language-features/if-while-or-patterns.html"><strong aria-hidden="true">2.53.</strong> if_while_or_patterns</a></li><li><a href="language-features/in-band-lifetimes.html"><strong aria-hidden="true">2.54.</strong> in_band_lifetimes</a></li><li><a href="language-features/infer-outlives-requirements.html"><strong aria-hidden="true">2.55.</strong> infer_outlives_requirements</a></li><li><a href="language-features/intrinsics.html"><strong aria-hidden="true">2.56.</strong> intrinsics</a></li><li><a href="language-features/label-break-value.html"><strong aria-hidden="true">2.57.</strong> label_break_value</a></li><li><a href="language-features/lang-items.html"><strong aria-hidden="true">2.58.</strong> lang_items</a></li><li><a href="language-features/link-args.html"><strong aria-hidden="true">2.59.</strong> link_args</a></li><li><a href="language-features/link-cfg.html"><strong aria-hidden="true">2.60.</strong> link_cfg</a></li><li><a href="language-features/link-llvm-intrinsics.html"><strong aria-hidden="true">2.61.</strong> link_llvm_intrinsics</a></li><li><a href="language-features/linkage.html"><strong aria-hidden="true">2.62.</strong> linkage</a></li><li><a href="language-features/log-syntax.html"><strong aria-hidden="true">2.63.</strong> log_syntax</a></li><li><a href="language-features/macro-at-most-once-rep.html"><strong aria-hidden="true">2.64.</strong> macro_at_most_once_rep</a></li><li><a href="language-features/macro-literal-matcher.html"><strong aria-hidden="true">2.65.</strong> macro_literal_matcher</a></li><li><a href="language-features/macro-vis-matcher.html"><strong aria-hidden="true">2.66.</strong> macro_vis_matcher</a></li><li><a href="language-features/macros-in-extern.html"><strong aria-hidden="true">2.67.</strong> macros_in_extern</a></li><li><a href="language-features/main.html"><strong aria-hidden="true">2.68.</strong> main</a></li><li><a href="language-features/mips-target-feature.html"><strong aria-hidden="true">2.69.</strong> mips_target_feature</a></li><li><a href="language-features/mmx-target-feature.html"><strong aria-hidden="true">2.70.</strong> mmx_target_feature</a></li><li><a href="language-features/naked-functions.html"><strong aria-hidden="true">2.71.</strong> naked_functions</a></li><li><a href="language-features/needs-allocator.html"><strong aria-hidden="true">2.72.</strong> needs_allocator</a></li><li><a href="language-features/needs-panic-runtime.html"><strong aria-hidden="true">2.73.</strong> needs_panic_runtime</a></li><li><a href="language-features/never-type.html"><strong aria-hidden="true">2.74.</strong> never_type</a></li><li><a href="language-features/nll.html"><strong aria-hidden="true">2.75.</strong> nll</a></li><li><a href="language-features/no-core.html"><strong aria-hidden="true">2.76.</strong> no_core</a></li><li><a href="language-features/no-debug.html"><strong aria-hidden="true">2.77.</strong> no_debug</a></li><li><a href="language-features/non-ascii-idents.html"><strong aria-hidden="true">2.78.</strong> non_ascii_idents</a></li><li><a href="language-features/non-exhaustive.html"><strong aria-hidden="true">2.79.</strong> non_exhaustive</a></li><li><a href="language-features/non-modrs-mods.html"><strong aria-hidden="true">2.80.</strong> non_modrs_mods</a></li><li><a href="language-features/omit-gdb-pretty-printer-section.html"><strong aria-hidden="true">2.81.</strong> omit_gdb_pretty_printer_section</a></li><li><a href="language-features/on-unimplemented.html"><strong aria-hidden="true">2.82.</strong> on_unimplemented</a></li><li><a href="language-features/optin-builtin-traits.html"><strong aria-hidden="true">2.83.</strong> optin_builtin_traits</a></li><li><a href="language-features/overlapping-marker-traits.html"><strong aria-hidden="true">2.84.</strong> overlapping_marker_traits</a></li><li><a href="language-features/panic-implementation.html"><strong aria-hidden="true">2.85.</strong> panic_implementation</a></li><li><a href="language-features/panic-runtime.html"><strong aria-hidden="true">2.86.</strong> panic_runtime</a></li><li><a href="language-features/pattern-parentheses.html"><strong aria-hidden="true">2.87.</strong> pattern_parentheses</a></li><li><a href="language-features/platform-intrinsics.html"><strong aria-hidden="true">2.88.</strong> platform_intrinsics</a></li><li><a href="language-features/plugin.html"><strong aria-hidden="true">2.89.</strong> plugin</a></li><li><a href="language-features/plugin-registrar.html"><strong aria-hidden="true">2.90.</strong> plugin_registrar</a></li><li><a href="language-features/powerpc-target-feature.html"><strong aria-hidden="true">2.91.</strong> powerpc_target_feature</a></li><li><a href="language-features/prelude-import.html"><strong aria-hidden="true">2.92.</strong> prelude_import</a></li><li><a href="language-features/proc-macro.html"><strong aria-hidden="true">2.93.</strong> proc_macro</a></li><li><a href="language-features/proc-macro-expr.html"><strong aria-hidden="true">2.94.</strong> proc_macro_expr</a></li><li><a href="language-features/proc-macro-gen.html"><strong aria-hidden="true">2.95.</strong> proc_macro_gen</a></li><li><a href="language-features/proc-macro-mod.html"><strong aria-hidden="true">2.96.</strong> proc_macro_mod</a></li><li><a href="language-features/proc-macro-non-items.html"><strong aria-hidden="true">2.97.</strong> proc_macro_non_items</a></li><li><a href="language-features/proc-macro-path-invoc.html"><strong aria-hidden="true">2.98.</strong> proc_macro_path_invoc</a></li><li><a href="language-features/profiler-runtime.html"><strong aria-hidden="true">2.99.</strong> profiler_runtime</a></li><li><a href="language-features/quote.html"><strong aria-hidden="true">2.100.</strong> quote</a></li><li><a href="language-features/raw-identifiers.html"><strong aria-hidden="true">2.101.</strong> raw_identifiers</a></li><li><a href="language-features/repr-packed.html"><strong aria-hidden="true">2.102.</strong> repr_packed</a></li><li><a href="language-features/repr-simd.html"><strong aria-hidden="true">2.103.</strong> repr_simd</a></li><li><a href="language-features/repr128.html"><strong aria-hidden="true">2.104.</strong> repr128</a></li><li><a href="language-features/rustc-attrs.html"><strong aria-hidden="true">2.105.</strong> rustc_attrs</a></li><li><a href="language-features/rustc-const-unstable.html"><strong aria-hidden="true">2.106.</strong> rustc_const_unstable</a></li><li><a href="language-features/rustc-diagnostic-macros.html"><strong aria-hidden="true">2.107.</strong> rustc_diagnostic_macros</a></li><li><a href="language-features/sanitizer-runtime.html"><strong aria-hidden="true">2.108.</strong> sanitizer_runtime</a></li><li><a href="language-features/simd-ffi.html"><strong aria-hidden="true">2.109.</strong> simd_ffi</a></li><li><a href="language-features/slice-patterns.html"><strong aria-hidden="true">2.110.</strong> slice_patterns</a></li><li><a href="language-features/specialization.html"><strong aria-hidden="true">2.111.</strong> specialization</a></li><li><a href="language-features/sse4a-target-feature.html"><strong aria-hidden="true">2.112.</strong> sse4a_target_feature</a></li><li><a href="language-features/staged-api.html"><strong aria-hidden="true">2.113.</strong> staged_api</a></li><li><a href="language-features/start.html"><strong aria-hidden="true">2.114.</strong> start</a></li><li><a href="language-features/static-nobundle.html"><strong aria-hidden="true">2.115.</strong> static_nobundle</a></li><li><a href="language-features/stmt-expr-attributes.html"><strong aria-hidden="true">2.116.</strong> stmt_expr_attributes</a></li><li><a href="language-features/structural-match.html"><strong aria-hidden="true">2.117.</strong> structural_match</a></li><li><a href="language-features/tbm-target-feature.html"><strong aria-hidden="true">2.118.</strong> tbm_target_feature</a></li><li><a href="language-features/thread-local.html"><strong aria-hidden="true">2.119.</strong> thread_local</a></li><li><a href="language-features/tool-attributes.html"><strong aria-hidden="true">2.120.</strong> tool_attributes</a></li><li><a href="language-features/trace-macros.html"><strong aria-hidden="true">2.121.</strong> trace_macros</a></li><li><a href="language-features/trait-alias.html"><strong aria-hidden="true">2.122.</strong> trait_alias</a></li><li><a href="language-features/trivial-bounds.html"><strong aria-hidden="true">2.123.</strong> trivial_bounds</a></li><li><a href="language-features/type-ascription.html"><strong aria-hidden="true">2.124.</strong> type_ascription</a></li><li><a href="language-features/unboxed-closures.html"><strong aria-hidden="true">2.125.</strong> unboxed_closures</a></li><li><a href="language-features/underscore-imports.html"><strong aria-hidden="true">2.126.</strong> underscore_imports</a></li><li><a href="language-features/unsized-tuple-coercion.html"><strong aria-hidden="true">2.127.</strong> unsized_tuple_coercion</a></li><li><a href="language-features/untagged-unions.html"><strong aria-hidden="true">2.128.</strong> untagged_unions</a></li><li><a href="language-features/unwind-attributes.html"><strong aria-hidden="true">2.129.</strong> unwind_attributes</a></li><li><a href="language-features/use-extern-macros.html"><strong aria-hidden="true">2.130.</strong> use_extern_macros</a></li><li><a href="language-features/used.html"><strong aria-hidden="true">2.131.</strong> used</a></li><li><a href="language-features/wasm-custom-section.html"><strong aria-hidden="true">2.132.</strong> wasm_custom_section</a></li><li><a href="language-features/wasm-import-module.html"><strong aria-hidden="true">2.133.</strong> wasm_import_module</a></li></ol></li><li><a href="library-features.html"><strong aria-hidden="true">3.</strong> Library Features</a></li><li><ol class="section"><li><a href="library-features/align-offset.html"><strong aria-hidden="true">3.1.</strong> align_offset</a></li><li><a href="library-features/alloc.html"><strong aria-hidden="true">3.2.</strong> alloc</a></li><li><a href="library-features/alloc-error-hook.html"><strong aria-hidden="true">3.3.</strong> alloc_error_hook</a></li><li><a href="library-features/alloc-internals.html"><strong aria-hidden="true">3.4.</strong> alloc_internals</a></li><li><a href="library-features/alloc-jemalloc.html"><strong aria-hidden="true">3.5.</strong> alloc_jemalloc</a></li><li><a href="library-features/alloc-system.html"><strong aria-hidden="true">3.6.</strong> alloc_system</a></li><li><a href="library-features/allocator-api.html"><strong aria-hidden="true">3.7.</strong> allocator_api</a></li><li><a href="library-features/array-error-internals.html"><strong aria-hidden="true">3.8.</strong> array_error_internals</a></li><li><a href="library-features/ascii-ctype.html"><strong aria-hidden="true">3.9.</strong> ascii_ctype</a></li><li><a href="library-features/atomic-min-max.html"><strong aria-hidden="true">3.10.</strong> atomic_min_max</a></li><li><a href="library-features/box-into-raw-non-null.html"><strong aria-hidden="true">3.11.</strong> box_into_raw_non_null</a></li><li><a href="library-features/bufreader-buffer.html"><strong aria-hidden="true">3.12.</strong> bufreader_buffer</a></li><li><a href="library-features/bufreader-is-empty.html"><strong aria-hidden="true">3.13.</strong> bufreader_is_empty</a></li><li><a href="library-features/bufreader-seek-relative.html"><strong aria-hidden="true">3.14.</strong> bufreader_seek_relative</a></li><li><a href="library-features/c-void-variant.html"><strong aria-hidden="true">3.15.</strong> c_void_variant</a></li><li><a href="library-features/cell-update.html"><strong aria-hidden="true">3.16.</strong> cell_update</a></li><li><a href="library-features/char-error-internals.html"><strong aria-hidden="true">3.17.</strong> char_error_internals</a></li><li><a href="library-features/coerce-unsized.html"><strong aria-hidden="true">3.18.</strong> coerce_unsized</a></li><li><a href="library-features/compiler-builtins-lib.html"><strong aria-hidden="true">3.19.</strong> compiler_builtins_lib</a></li><li><a href="library-features/concat-idents-macro.html"><strong aria-hidden="true">3.20.</strong> concat_idents_macro</a></li><li><a href="library-features/const-int-ops.html"><strong aria-hidden="true">3.21.</strong> const_int_ops</a></li><li><a href="library-features/const-manually-drop-new.html"><strong aria-hidden="true">3.22.</strong> const_manually_drop_new</a></li><li><a href="library-features/const-slice-as-ptr.html"><strong aria-hidden="true">3.23.</strong> const_slice_as_ptr</a></li><li><a href="library-features/const-slice-len.html"><strong aria-hidden="true">3.24.</strong> const_slice_len</a></li><li><a href="library-features/const-str-as-bytes.html"><strong aria-hidden="true">3.25.</strong> const_str_as_bytes</a></li><li><a href="library-features/const-str-as-ptr.html"><strong aria-hidden="true">3.26.</strong> const_str_as_ptr</a></li><li><a href="library-features/const-str-len.html"><strong aria-hidden="true">3.27.</strong> const_str_len</a></li><li><a href="library-features/const-string-new.html"><strong aria-hidden="true">3.28.</strong> const_string_new</a></li><li><a href="library-features/const-type-id.html"><strong aria-hidden="true">3.29.</strong> const_type_id</a></li><li><a href="library-features/const-vec-new.html"><strong aria-hidden="true">3.30.</strong> const_vec_new</a></li><li><a href="library-features/core-intrinsics.html"><strong aria-hidden="true">3.31.</strong> core_intrinsics</a></li><li><a href="library-features/core-panic.html"><strong aria-hidden="true">3.32.</strong> core_panic</a></li><li><a href="library-features/core-panic-info.html"><strong aria-hidden="true">3.33.</strong> core_panic_info</a></li><li><a href="library-features/core-private-bignum.html"><strong aria-hidden="true">3.34.</strong> core_private_bignum</a></li><li><a href="library-features/core-private-diy-float.html"><strong aria-hidden="true">3.35.</strong> core_private_diy_float</a></li><li><a href="library-features/deadline-api.html"><strong aria-hidden="true">3.36.</strong> deadline_api</a></li><li><a href="library-features/dec2flt.html"><strong aria-hidden="true">3.37.</strong> dec2flt</a></li><li><a href="library-features/decode-utf8.html"><strong aria-hidden="true">3.38.</strong> decode_utf8</a></li><li><a href="library-features/derive-clone-copy.html"><strong aria-hidden="true">3.39.</strong> derive_clone_copy</a></li><li><a href="library-features/derive-eq.html"><strong aria-hidden="true">3.40.</strong> derive_eq</a></li><li><a href="library-features/drain-filter.html"><strong aria-hidden="true">3.41.</strong> drain_filter</a></li><li><a href="library-features/duration-as-u128.html"><strong aria-hidden="true">3.42.</strong> duration_as_u128</a></li><li><a href="library-features/duration-getters.html"><strong aria-hidden="true">3.43.</strong> duration_getters</a></li><li><a href="library-features/error-type-id.html"><strong aria-hidden="true">3.44.</strong> error_type_id</a></li><li><a href="library-features/euclidean-division.html"><strong aria-hidden="true">3.45.</strong> euclidean_division</a></li><li><a href="library-features/exact-chunks.html"><strong aria-hidden="true">3.46.</strong> exact_chunks</a></li><li><a href="library-features/exact-size-is-empty.html"><strong aria-hidden="true">3.47.</strong> exact_size_is_empty</a></li><li><a href="library-features/extra-log-consts.html"><strong aria-hidden="true">3.48.</strong> extra_log_consts</a></li><li><a href="library-features/fd.html"><strong aria-hidden="true">3.49.</strong> fd</a></li><li><a href="library-features/fd-read.html"><strong aria-hidden="true">3.50.</strong> fd_read</a></li><li><a href="library-features/fixed-size-array.html"><strong aria-hidden="true">3.51.</strong> fixed_size_array</a></li><li><a href="library-features/flt2dec.html"><strong aria-hidden="true">3.52.</strong> flt2dec</a></li><li><a href="library-features/fmt-internals.html"><strong aria-hidden="true">3.53.</strong> fmt_internals</a></li><li><a href="library-features/fn-traits.html"><strong aria-hidden="true">3.54.</strong> fn_traits</a></li><li><a href="library-features/fnbox.html"><strong aria-hidden="true">3.55.</strong> fnbox</a></li><li><a href="library-features/future-atomic-orderings.html"><strong aria-hidden="true">3.56.</strong> future_atomic_orderings</a></li><li><a href="library-features/futures-api.html"><strong aria-hidden="true">3.57.</strong> futures_api</a></li><li><a href="library-features/generator-trait.html"><strong aria-hidden="true">3.58.</strong> generator_trait</a></li><li><a href="library-features/get-type-id.html"><strong aria-hidden="true">3.59.</strong> get_type_id</a></li><li><a href="library-features/hashmap-internals.html"><strong aria-hidden="true">3.60.</strong> hashmap_internals</a></li><li><a href="library-features/int-error-internals.html"><strong aria-hidden="true">3.61.</strong> int_error_internals</a></li><li><a href="library-features/int-to-from-bytes.html"><strong aria-hidden="true">3.62.</strong> int_to_from_bytes</a></li><li><a href="library-features/integer-atomics.html"><strong aria-hidden="true">3.63.</strong> integer_atomics</a></li><li><a href="library-features/io.html"><strong aria-hidden="true">3.64.</strong> io</a></li><li><a href="library-features/io-error-internals.html"><strong aria-hidden="true">3.65.</strong> io_error_internals</a></li><li><a href="library-features/ip.html"><strong aria-hidden="true">3.66.</strong> ip</a></li><li><a href="library-features/ip-constructors.html"><strong aria-hidden="true">3.67.</strong> ip_constructors</a></li><li><a href="library-features/iterator-find-map.html"><strong aria-hidden="true">3.68.</strong> iterator_find_map</a></li><li><a href="library-features/iterator-flatten.html"><strong aria-hidden="true">3.69.</strong> iterator_flatten</a></li><li><a href="library-features/libstd-io-internals.html"><strong aria-hidden="true">3.70.</strong> libstd_io_internals</a></li><li><a href="library-features/libstd-sys-internals.html"><strong aria-hidden="true">3.71.</strong> libstd_sys_internals</a></li><li><a href="library-features/libstd-thread-internals.html"><strong aria-hidden="true">3.72.</strong> libstd_thread_internals</a></li><li><a href="library-features/linked-list-extras.html"><strong aria-hidden="true">3.73.</strong> linked_list_extras</a></li><li><a href="library-features/map-entry-replace.html"><strong aria-hidden="true">3.74.</strong> map_entry_replace</a></li><li><a href="library-features/map-get-key-value.html"><strong aria-hidden="true">3.75.</strong> map_get_key_value</a></li><li><a href="library-features/mpsc-select.html"><strong aria-hidden="true">3.76.</strong> mpsc_select</a></li><li><a href="library-features/n16.html"><strong aria-hidden="true">3.77.</strong> n16</a></li><li><a href="library-features/no-more-cas.html"><strong aria-hidden="true">3.78.</strong> no_more_cas</a></li><li><a href="library-features/no-panic-pow.html"><strong aria-hidden="true">3.79.</strong> no_panic_pow</a></li><li><a href="library-features/offset-to.html"><strong aria-hidden="true">3.80.</strong> offset_to</a></li><li><a href="library-features/once-poison.html"><strong aria-hidden="true">3.81.</strong> once_poison</a></li><li><a href="library-features/option-xor.html"><strong aria-hidden="true">3.82.</strong> option_xor</a></li><li><a href="library-features/panic-abort.html"><strong aria-hidden="true">3.83.</strong> panic_abort</a></li><li><a href="library-features/panic-info-message.html"><strong aria-hidden="true">3.84.</strong> panic_info_message</a></li><li><a href="library-features/panic-internals.html"><strong aria-hidden="true">3.85.</strong> panic_internals</a></li><li><a href="library-features/panic-unwind.html"><strong aria-hidden="true">3.86.</strong> panic_unwind</a></li><li><a href="library-features/pattern.html"><strong aria-hidden="true">3.87.</strong> pattern</a></li><li><a href="library-features/pin.html"><strong aria-hidden="true">3.88.</strong> pin</a></li><li><a href="library-features/print-internals.html"><strong aria-hidden="true">3.89.</strong> print_internals</a></li><li><a href="library-features/proc-macro-internals.html"><strong aria-hidden="true">3.90.</strong> proc_macro_internals</a></li><li><a href="library-features/process-exitcode-placeholder.html"><strong aria-hidden="true">3.91.</strong> process_exitcode_placeholder</a></li><li><a href="library-features/process-internals.html"><strong aria-hidden="true">3.92.</strong> process_internals</a></li><li><a href="library-features/profiler-runtime-lib.html"><strong aria-hidden="true">3.93.</strong> profiler_runtime_lib</a></li><li><a href="library-features/ptr-internals.html"><strong aria-hidden="true">3.94.</strong> ptr_internals</a></li><li><a href="library-features/ptr-offset-from.html"><strong aria-hidden="true">3.95.</strong> ptr_offset_from</a></li><li><a href="library-features/ptr-wrapping-offset-from.html"><strong aria-hidden="true">3.96.</strong> ptr_wrapping_offset_from</a></li><li><a href="library-features/range-contains.html"><strong aria-hidden="true">3.97.</strong> range_contains</a></li><li><a href="library-features/range-is-empty.html"><strong aria-hidden="true">3.98.</strong> range_is_empty</a></li><li><a href="library-features/raw.html"><strong aria-hidden="true">3.99.</strong> raw</a></li><li><a href="library-features/rc-downcast.html"><strong aria-hidden="true">3.100.</strong> rc_downcast</a></li><li><a href="library-features/read-initializer.html"><strong aria-hidden="true">3.101.</strong> read_initializer</a></li><li><a href="library-features/refcell-map-split.html"><strong aria-hidden="true">3.102.</strong> refcell_map_split</a></li><li><a href="library-features/refcell-replace-swap.html"><strong aria-hidden="true">3.103.</strong> refcell_replace_swap</a></li><li><a href="library-features/repeat-generic-slice.html"><strong aria-hidden="true">3.104.</strong> repeat_generic_slice</a></li><li><a href="library-features/reverse-bits.html"><strong aria-hidden="true">3.105.</strong> reverse_bits</a></li><li><a href="library-features/rt.html"><strong aria-hidden="true">3.106.</strong> rt</a></li><li><a href="library-features/rustc-private.html"><strong aria-hidden="true">3.107.</strong> rustc_private</a></li><li><a href="library-features/rustc-stack-internals.html"><strong aria-hidden="true">3.108.</strong> rustc_stack_internals</a></li><li><a href="library-features/sanitizer-runtime-lib.html"><strong aria-hidden="true">3.109.</strong> sanitizer_runtime_lib</a></li><li><a href="library-features/set-stdio.html"><strong aria-hidden="true">3.110.</strong> set_stdio</a></li><li><a href="library-features/shrink-to.html"><strong aria-hidden="true">3.111.</strong> shrink_to</a></li><li><a href="library-features/slice-align-to.html"><strong aria-hidden="true">3.112.</strong> slice_align_to</a></li><li><a href="library-features/slice-concat-ext.html"><strong aria-hidden="true">3.113.</strong> slice_concat_ext</a></li><li><a href="library-features/slice-index-methods.html"><strong aria-hidden="true">3.114.</strong> slice_index_methods</a></li><li><a href="library-features/slice-internals.html"><strong aria-hidden="true">3.115.</strong> slice_internals</a></li><li><a href="library-features/slice-sort-by-cached-key.html"><strong aria-hidden="true">3.116.</strong> slice_sort_by_cached_key</a></li><li><a href="library-features/sort-internals.html"><strong aria-hidden="true">3.117.</strong> sort_internals</a></li><li><a href="library-features/std-internals.html"><strong aria-hidden="true">3.118.</strong> std_internals</a></li><li><a href="library-features/stdsimd.html"><strong aria-hidden="true">3.119.</strong> stdsimd</a></li><li><a href="library-features/step-trait.html"><strong aria-hidden="true">3.120.</strong> step_trait</a></li><li><a href="library-features/str-escape.html"><strong aria-hidden="true">3.121.</strong> str_escape</a></li><li><a href="library-features/str-internals.html"><strong aria-hidden="true">3.122.</strong> str_internals</a></li><li><a href="library-features/termination-trait-lib.html"><strong aria-hidden="true">3.123.</strong> termination_trait_lib</a></li><li><a href="library-features/test.html"><strong aria-hidden="true">3.124.</strong> test</a></li><li><a href="library-features/thread-local-internals.html"><strong aria-hidden="true">3.125.</strong> thread_local_internals</a></li><li><a href="library-features/toowned-clone-into.html"><strong aria-hidden="true">3.126.</strong> toowned_clone_into</a></li><li><a href="library-features/transpose-result.html"><strong aria-hidden="true">3.127.</strong> transpose_result</a></li><li><a href="library-features/trusted-len.html"><strong aria-hidden="true">3.128.</strong> trusted_len</a></li><li><a href="library-features/try-from.html"><strong aria-hidden="true">3.129.</strong> try_from</a></li><li><a href="library-features/try-reserve.html"><strong aria-hidden="true">3.130.</strong> try_reserve</a></li><li><a href="library-features/try-trait.html"><strong aria-hidden="true">3.131.</strong> try_trait</a></li><li><a href="library-features/unicode.html"><strong aria-hidden="true">3.132.</strong> unicode</a></li><li><a href="library-features/unicode-internals.html"><strong aria-hidden="true">3.133.</strong> unicode_internals</a></li><li><a href="library-features/unicode-version.html"><strong aria-hidden="true">3.134.</strong> unicode_version</a></li><li><a href="library-features/unsize.html"><strong aria-hidden="true">3.135.</strong> unsize</a></li><li><a href="library-features/update-panic-count.html"><strong aria-hidden="true">3.136.</strong> update_panic_count</a></li><li><a href="library-features/vec-remove-item.html"><strong aria-hidden="true">3.137.</strong> vec_remove_item</a></li><li><a href="library-features/vec-resize-default.html"><strong aria-hidden="true">3.138.</strong> vec_resize_default</a></li><li><a href="library-features/vec-resize-with.html"><strong aria-hidden="true">3.139.</strong> vec_resize_with</a></li><li><a href="library-features/wait-timeout-until.html"><strong aria-hidden="true">3.140.</strong> wait_timeout_until</a></li><li><a href="library-features/wait-until.html"><strong aria-hidden="true">3.141.</strong> wait_until</a></li><li><a href="library-features/windows-c.html"><strong aria-hidden="true">3.142.</strong> windows_c</a></li><li><a href="library-features/windows-file-type-ext.html"><strong aria-hidden="true">3.143.</strong> windows_file_type_ext</a></li><li><a href="library-features/windows-handle.html"><strong aria-hidden="true">3.144.</strong> windows_handle</a></li><li><a href="library-features/windows-net.html"><strong aria-hidden="true">3.145.</strong> windows_net</a></li><li><a href="library-features/windows-stdio.html"><strong aria-hidden="true">3.146.</strong> windows_stdio</a></li><li><a href="library-features/wrapping-int-impl.html"><strong aria-hidden="true">3.147.</strong> wrapping_int_impl</a></li><li><a href="library-features/wrapping-next-power-of-two.html"><strong aria-hidden="true">3.148.</strong> wrapping_next_power_of_two</a></li></ol></li></ol>
        </nav>

        <div id="page-wrapper" class="page-wrapper">

            <div class="page">
                
                <div id="menu-bar" class="menu-bar">
                    <div id="menu-bar-sticky-container">
                        <div class="left-buttons">
                            <button id="sidebar-toggle" class="icon-button" type="button" title="Toggle Table of Contents" aria-label="Toggle Table of Contents" aria-controls="sidebar">
                                <i class="fa fa-bars"></i>
                            </button>
                            <button id="theme-toggle" class="icon-button" type="button" title="Change theme" aria-label="Change theme" aria-haspopup="true" aria-expanded="false" aria-controls="theme-list">
                                <i class="fa fa-paint-brush"></i>
                            </button>
                            <ul id="theme-list" class="theme-popup" aria-label="Themes" role="menu">
                                <li role="none"><button role="menuitem" class="theme" id="light">Light <span class="default">(default)</span></button></li>
                                <li role="none"><button role="menuitem" class="theme" id="rust">Rust</button></li>
                                <li role="none"><button role="menuitem" class="theme" id="coal">Coal</button></li>
                                <li role="none"><button role="menuitem" class="theme" id="navy">Navy</button></li>
                                <li role="none"><button role="menuitem" class="theme" id="ayu">Ayu</button></li>
                            </ul>
                            
                            <button id="search-toggle" class="icon-button" type="button" title="Search. (Shortkey: s)" aria-label="Toggle Searchbar" aria-expanded="false" aria-keyshortcuts="S" aria-controls="searchbar">
                                <i class="fa fa-search"></i>
                            </button>
                            
                        </div>

                        <h1 class="menu-title"></h1> 

                        <div class="right-buttons">
                            <a href="print.html" title="Print this book" aria-label="Print this book">
                                <i id="print-button" class="fa fa-print"></i>
                            </a>
                        </div>
                    </div>
                </div>

                
                <div id="search-wrapper" class="hidden">
                    <form id="searchbar-outer" class="searchbar-outer">
                        <input type="search" name="search" id="searchbar" name="searchbar" placeholder="Search this book ..." aria-controls="searchresults-outer" aria-describedby="searchresults-header">
                    </form>
                    <div id="searchresults-outer" class="searchresults-outer hidden">
                        <div id="searchresults-header" class="searchresults-header"></div>
                        <ul id="searchresults">
                        </ul>
                    </div>
                </div>
                

                <!-- Apply ARIA attributes after the sidebar and the sidebar toggle button are added to the DOM -->
                <script type="text/javascript">
                    document.getElementById('sidebar-toggle').setAttribute('aria-expanded', sidebar === 'visible');
                    document.getElementById('sidebar').setAttribute('aria-hidden', sidebar !== 'visible');
                    Array.from(document.querySelectorAll('#sidebar a')).forEach(function(link) {
                        link.setAttribute('tabIndex', sidebar === 'visible' ? 0 : -1);
                    });
                </script>

                <div id="content" class="content">
                    <main>
                        <a class="header" href="language-features/generators.html#generators" id="generators"><h1><code>generators</code></h1></a>
<p>The tracking issue for this feature is: <a href="https://github.com/rust-lang/rust/issues/43122">#43122</a></p>
<hr />
<p>The <code>generators</code> feature gate in Rust allows you to define generator or
coroutine literals. A generator is a &quot;resumable function&quot; that syntactically
resembles a closure but compiles to much different semantics in the compiler
itself. The primary feature of a generator is that it can be suspended during
execution to be resumed at a later date. Generators use the <code>yield</code> keyword to
&quot;return&quot;, and then the caller can <code>resume</code> a generator to resume execution just
after the <code>yield</code> keyword.</p>
<p>Generators are an extra-unstable feature in the compiler right now. Added in
<a href="https://github.com/rust-lang/rfcs/pull/2033">RFC 2033</a> they're mostly intended right now as a information/constraint
gathering phase. The intent is that experimentation can happen on the nightly
compiler before actual stabilization. A further RFC will be required to
stabilize generators/coroutines and will likely contain at least a few small
tweaks to the overall design.</p>
<p>A syntactical example of a generator is:</p>
<pre><pre class="playpen"><code class="language-rust">#![feature(generators, generator_trait)]

use std::ops::{Generator, GeneratorState};

fn main() {
    let mut generator = || {
        yield 1;
        return &quot;foo&quot;
    };

    match unsafe { generator.resume() } {
        GeneratorState::Yielded(1) =&gt; {}
        _ =&gt; panic!(&quot;unexpected value from resume&quot;),
    }
    match unsafe { generator.resume() } {
        GeneratorState::Complete(&quot;foo&quot;) =&gt; {}
        _ =&gt; panic!(&quot;unexpected value from resume&quot;),
    }
}
</code></pre></pre>
<p>Generators are closure-like literals which can contain a <code>yield</code> statement. The
<code>yield</code> statement takes an optional expression of a value to yield out of the
generator. All generator literals implement the <code>Generator</code> trait in the
<code>std::ops</code> module. The <code>Generator</code> trait has one main method, <code>resume</code>, which
resumes execution of the generator at the previous suspension point.</p>
<p>An example of the control flow of generators is that the following example
prints all numbers in order:</p>
<pre><pre class="playpen"><code class="language-rust">#![feature(generators, generator_trait)]

use std::ops::Generator;

fn main() {
    let mut generator = || {
        println!(&quot;2&quot;);
        yield;
        println!(&quot;4&quot;);
    };

    println!(&quot;1&quot;);
    unsafe { generator.resume() };
    println!(&quot;3&quot;);
    unsafe { generator.resume() };
    println!(&quot;5&quot;);
}
</code></pre></pre>
<p>At this time the main intended use case of generators is an implementation
primitive for async/await syntax, but generators will likely be extended to
ergonomic implementations of iterators and other primitives in the future.
Feedback on the design and usage is always appreciated!</p>
<a class="header" href="language-features/generators.html#the-generator-trait" id="the-generator-trait"><h3>The <code>Generator</code> trait</h3></a>
<p>The <code>Generator</code> trait in <code>std::ops</code> currently looks like:</p>
<pre><code># #![feature(generator_trait)]
# use std::ops::GeneratorState;

pub trait Generator {
    type Yield;
    type Return;
    unsafe fn resume(&amp;mut self) -&gt; GeneratorState&lt;Self::Yield, Self::Return&gt;;
}
</code></pre>
<p>The <code>Generator::Yield</code> type is the type of values that can be yielded with the
<code>yield</code> statement. The <code>Generator::Return</code> type is the returned type of the
generator. This is typically the last expression in a generator's definition or
any value passed to <code>return</code> in a generator. The <code>resume</code> function is the entry
point for executing the <code>Generator</code> itself.</p>
<p>The return value of <code>resume</code>, <code>GeneratorState</code>, looks like:</p>
<pre><code>pub enum GeneratorState&lt;Y, R&gt; {
    Yielded(Y),
    Complete(R),
}
</code></pre>
<p>The <code>Yielded</code> variant indicates that the generator can later be resumed. This
corresponds to a <code>yield</code> point in a generator. The <code>Complete</code> variant indicates
that the generator is complete and cannot be resumed again. Calling <code>resume</code>
after a generator has returned <code>Complete</code> will likely result in a panic of the
program.</p>
<a class="header" href="language-features/generators.html#closure-like-semantics" id="closure-like-semantics"><h3>Closure-like semantics</h3></a>
<p>The closure-like syntax for generators alludes to the fact that they also have
closure-like semantics. Namely:</p>
<ul>
<li>
<p>When created, a generator executes no code. A closure literal does not
actually execute any of the closure's code on construction, and similarly a
generator literal does not execute any code inside the generator when
constructed.</p>
</li>
<li>
<p>Generators can capture outer variables by reference or by move, and this can
be tweaked with the <code>move</code> keyword at the beginning of the closure. Like
closures all generators will have an implicit environment which is inferred by
the compiler. Outer variables can be moved into a generator for use as the
generator progresses.</p>
</li>
<li>
<p>Generator literals produce a value with a unique type which implements the
<code>std::ops::Generator</code> trait. This allows actual execution of the generator
through the <code>Generator::resume</code> method as well as also naming it in return
types and such.</p>
</li>
<li>
<p>Traits like <code>Send</code> and <code>Sync</code> are automatically implemented for a <code>Generator</code>
depending on the captured variables of the environment. Unlike closures,
generators also depend on variables live across suspension points. This means
that although the ambient environment may be <code>Send</code> or <code>Sync</code>, the generator
itself may not be due to internal variables live across <code>yield</code> points being
not-<code>Send</code> or not-<code>Sync</code>. Note that generators, like closures, do
not implement traits like <code>Copy</code> or <code>Clone</code> automatically.</p>
</li>
<li>
<p>Whenever a generator is dropped it will drop all captured environment
variables.</p>
</li>
</ul>
<p>Note that unlike closures generators at this time cannot take any arguments.
That is, generators must always look like <code>|| { ... }</code>. This restriction may be
lifted at a future date, the design is ongoing!</p>
<a class="header" href="language-features/generators.html#generators-as-state-machines" id="generators-as-state-machines"><h3>Generators as state machines</h3></a>
<p>In the compiler, generators are currently compiled as state machines. Each
<code>yield</code> expression will correspond to a different state that stores all live
variables over that suspension point. Resumption of a generator will dispatch on
the current state and then execute internally until a <code>yield</code> is reached, at
which point all state is saved off in the generator and a value is returned.</p>
<p>Let's take a look at an example to see what's going on here:</p>
<pre><pre class="playpen"><code class="language-rust">#![feature(generators, generator_trait)]

use std::ops::Generator;

fn main() {
    let ret = &quot;foo&quot;;
    let mut generator = move || {
        yield 1;
        return ret
    };

    unsafe { generator.resume() };
    unsafe { generator.resume() };
}
</code></pre></pre>
<p>This generator literal will compile down to something similar to:</p>
<pre><pre class="playpen"><code class="language-rust">#![feature(generators, generator_trait)]

use std::ops::{Generator, GeneratorState};

fn main() {
    let ret = &quot;foo&quot;;
    let mut generator = {
        enum __Generator {
            Start(&amp;'static str),
            Yield1(&amp;'static str),
            Done,
        }

        impl Generator for __Generator {
            type Yield = i32;
            type Return = &amp;'static str;

            unsafe fn resume(&amp;mut self) -&gt; GeneratorState&lt;i32, &amp;'static str&gt; {
                use std::mem;
                match mem::replace(self, __Generator::Done) {
                    __Generator::Start(s) =&gt; {
                        *self = __Generator::Yield1(s);
                        GeneratorState::Yielded(1)
                    }

                    __Generator::Yield1(s) =&gt; {
                        *self = __Generator::Done;
                        GeneratorState::Complete(s)
                    }

                    __Generator::Done =&gt; {
                        panic!(&quot;generator resumed after completion&quot;)
                    }
                }
            }
        }

        __Generator::Start(ret)
    };

    unsafe { generator.resume() };
    unsafe { generator.resume() };
}
</code></pre></pre>
<p>Notably here we can see that the compiler is generating a fresh type,
<code>__Generator</code> in this case. This type has a number of states (represented here
as an <code>enum</code>) corresponding to each of the conceptual states of the generator.
At the beginning we're closing over our outer variable <code>foo</code> and then that
variable is also live over the <code>yield</code> point, so it's stored in both states.</p>
<p>When the generator starts it'll immediately yield 1, but it saves off its state
just before it does so indicating that it has reached the yield point. Upon
resuming again we'll execute the <code>return ret</code> which returns the <code>Complete</code>
state.</p>
<p>Here we can also note that the <code>Done</code> state, if resumed, panics immediately as
it's invalid to resume a completed generator. It's also worth noting that this
is just a rough desugaring, not a normative specification for what the compiler
does.</p>

                    </main>

                    <nav class="nav-wrapper" aria-label="Page navigation">
                        <!-- Mobile navigation buttons -->
                        
                            <a rel="prev" href="language-features/fundamental.html" class="mobile-nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                                <i class="fa fa-angle-left"></i>
                            </a>
                        

                        
                            <a rel="next" href="language-features/generic-associated-types.html" class="mobile-nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                                <i class="fa fa-angle-right"></i>
                            </a>
                        

                        <div style="clear: both"></div>
                    </nav>
                </div>
            </div>

            <nav class="nav-wide-wrapper" aria-label="Page navigation">
                
                    <a href="language-features/fundamental.html" class="nav-chapters previous" title="Previous chapter" aria-label="Previous chapter" aria-keyshortcuts="Left">
                        <i class="fa fa-angle-left"></i>
                    </a>
                

                
                    <a href="language-features/generic-associated-types.html" class="nav-chapters next" title="Next chapter" aria-label="Next chapter" aria-keyshortcuts="Right">
                        <i class="fa fa-angle-right"></i>
                    </a>
                
            </nav>

        </div>

        

        

        

        

        
        <script src="searchindex.js" type="text/javascript" charset="utf-8"></script>
        
        
        <script src="elasticlunr.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="mark.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="searcher.js" type="text/javascript" charset="utf-8"></script>
        

        <script src="clipboard.min.js" type="text/javascript" charset="utf-8"></script>
        <script src="highlight.js" type="text/javascript" charset="utf-8"></script>
        <script src="book.js" type="text/javascript" charset="utf-8"></script>

        <!-- Custom JS scripts -->
        

    </body>
</html>