# unreleased

# 0.27.0

      * Revert: The `Config` struct now has a private member.
      * Allow users to specify a crate version for bindings generation (#901).
      * Update MSRV to 1.74 (#912, #987).
      * Support #[deprecated] on enum variants (#933).
      * Support integrating the package_version information in a header file comment (#939).
      * Add a language backend (#942).
      * Support generics with defaulted args (#959).
      * Add `VaList` compatibility (#970).

# 0.26.0

      * Fix swapping of `>>=` and `<<=` in constants.
      * Add support for #[deprecated] (#860).
      * Built-in support for bitflags 2.0.
      * Support for "C-unwind" ABI.
      * Generate bindings for non-public extern items if they are #[no_mangle].

## 0.25.0

      * Re-release of yanked 0.24.6 as a major release
      * Update MSRV to 1.57
      * Support variadic arguments (`...`) (#805)
      * Add --depfile option (#820)
      * Breaking changes: The `Config` struct now has a private member.

## 0.24.6 (YANKED: depfile option was breaking, see #841)

      * Update MSRV to 1.57
      * Support variadic arguments (`...`) (#805)
      * Add --depfile option (#820)

## 0.24.5

      * Don't enforce tempfile version.

## 0.24.4

      * Move expand infinite recursion fix (#799)
      * Add with_cpp_compat to the builder (#796)
      * Handle never type in return position consistently (#780)
      * Fix warnings (#816, #819)
      * Updated documentation (#788, #791, #792, #810, #823)

## 0.24.3

      * Make struct expressions correctly generated through typedefs (#768).

## 0.24.2

      * Make bitfield operators use explicit constructors.

## 0.24.1

      * Add support for unary negation (#765).
      * Make more bitfield operators constexpr (#765).

## 0.24.0

      * Basic const generic support (#759, #760 #762).
      * Suffixes on integer literals are now honored to avoid narrowing (#764).

## 0.23.0

      * Better support for constexpr. (#756)
      * constexpr is now enabled by default in C++ mode. You can use const.allow_constexpr=false to revert to previous behavior. (#756)
      * Minimum syn version no longer parses old rust code. (#754)

## 0.22.0

      * Support rename rule for union body members (#751).
      * constant: Add support for associated constant expressions (#752).
      * Fix regression in CamelCase rename rule (should be lowerCamelCase) (#750).
      * enumeration: simplify standard types in variants (#749).
      * Avoid generating and writing bindings when called recursively (#747).
      * Cython: Omit per-variant tags in unions generated for Rust enums (#748).
      * Update various dependencies.

## 0.21.0

      * Update MSRV to 1.54.0
      * Update clap to 3.1.
      * Update heck to 0.4.0
      * unraw identifiers
      * Honor documentation_length in Cython.
      * Add documentation_style to with short and full options
      * Map RawFd to Int
      * Respect remove_underscores config when prefixing name to enum

## 0.20.0

     * Add Builder::with_using_namespaces. (#688)
     * Ignore PhantomPinned. (#695)
     * Simplify Pin<T> to T. (#697)
     * Update --pretty=expanded to -Zunpretty=expanded. (#706)

## 0.19.0

     * Simplify types in generics (#663)
     * Use --profile=check for macro expansion (#671)
     * Use exported name to prefix enum variants (#672)
     * Fix path attribute handling in inline submodules (#679)
     * Fix a stack overflow with some recursive typedefs (#680)

## 0.18.0

     * Simplify types in nested types such as pointed-to types and function signatures (#661)

## 0.17.0

     * Add with_parse_extra_bindings to builder. (#645)
     * Support NonZero and fix incorrect simplification of Option<ptr> into ptr. (#647)
     * Deal with name conflicts correctly in declaration type resolution. (#651)
     * Support pointers to ZSTs. (#656)

## 0.16.0

     * Remove artificial restriction on lifetime parameters on enums (#604)
     * Add an option for converting usize/isize into size_t/ptrdiff_t. (#606)
     * Allow controlling the cargo profile used for expansion. (#607)
     * Support wider range of expressions in enum discriminants (#614)
     * Support generation of Cython bindings (#590)
     * Fixed some issues with style=tag and recursive structs (#615)
     * Default C style to Both (as specified in docs) (#615)
     * Fix resolution of path dependencies from certain modules. (#629)
     * Support inlined definitions for tuple variants with a single field in C (#631)

Thanks to all the awesome contributors that contributed to this release.

## 0.15.0

     * Allow customizing mangling of generic parameters in C (#575)
     * Box<T> simplifies to T* in C (4ce324c)
     * ManuallyDrop<T> and MaybeUninit<T> simplify to T in C, and are opaque in C++ (0076a17)
     * C++ supports a derive-ostream annotation to derive serialization of structs, unions and enums (#582)
     * Large character constants have been fixed on Windows (#586)
     * Constants are now generated for typedefs, etc (#589)
     * The `sort_by` configuration option has been made to work for constants (#587)
     * Default sort order is source order now (sort_by = "None"), and can be changed by the above option (#587)

## 0.14.6

     * Fixed the builds with older versions of rustc.

## 0.14.5

     * Add support to specify line ending style (#568)
     * Add cbindgen:ptrs-as-arrays annotation to allow making function
       arguments C/C++ arrays.

## 0.14.4

     * Allow to override the mangling separator (#502)

     * cbindgen now handles better having ZSTs in template parameters, and
       default template parameters (#563).

     * Support for annotating nonnull pointers (#558)

     * Fixed bitflags that overflow a signed integer (#556)

     * Support for wildcard argument names (#550)

     * Support for the never return type, with configurable annotation (#549)

     * Properly reject arrays as function arguments (#540)

## 0.14.3

     * Introduce cbindgen:ignore comment annotation, to allow ignoring items or modules. (#519)
     * Support for casts in constant expressions. (#526)
     * Make a non-fatal error a warning message. (#535)
     * Add a --metadata option to the CLI, to allow passing pre-computed cargo metadata. (#538)

## 0.14.2

     * Fixed minimal dependency versions. (#507)
     * Add an option to write pragma once. (#511)
     * Fix submodule scanning for implicit Rust 2018 modules. (#512)
     * Fix dependency parsing / scanning to handle target-specific versions. (#513)
     * Use heck for case conversion. (#514)
     * Add support for verbatim content after includes. (#416)
     * Allow to add attributes to most generated functions. (#515)

## 0.14.1

     * Handle mangling pointers. (#508)
     * Unconditionally generate a return statement in partialeq implementations. (#509)

## 0.14.0

     * Minor tweak at how [export.exclude] is handled to allow excluding
       generic instantiations in C mode. (#501)
     * Documented cpp_compat option. (#496)
     * Fixed a panic when parsing associated constants for a built-in type. (#494)

## 0.13.2

     * Constants now have suitable documentation. (#471)
     * Fixed some C warnings by emitting void when there are no arguments. (#470)
     * Avoids reading cargo.toml when not needed, which can cause panics in workspace situations.
     * Only write `default` cases if the switch is not exhaustive. (#475)
     * Some warnings have been refined. (#477)
     * Code generation for static arrays has been fixed. (#479)
     * Opt-in support for constexpr in constants. (#481)
     * Fix C code generation and some warnings when extremely large constants are used. (#490)
     * Proper escaping of enum variants and fields. (#483)
     * Added support for RefCell (as an opaque type) and Cell. (#489)

## 0.13.1

     * Support `#[cfg]` on individual enum variants. (#469)

## 0.13.0

     * Support 'swift_name' attributes on generated functions (#449)
     * Add [export.pre_body] to config (#452)
     * Handle new line in doc attribute (#454)
     * Add support for `Self` in tagged enums, structs and unions (#455, #455, #456)
     * Make sentinel variant respect regular config (#459)
     * Fix layout of tagged enums with size under some configurations (#463)
     * Add an option to allow configuring the order of function names in generated headers (#466)

## 0.12.2

     * Fixed version detection with lockfile v2. https://github.com/mozilla/cbindgen/pull/446
     * Added support for export_name on functions. https://github.com/mozilla/cbindgen/pull/447

## 0.12.1

     * Added support for #[repr*64)] on enums. https://github.com/mozilla/cbindgen/pull/441
     * Added support to generate plain enums instead of enum classes for C++. https://github.com/mozilla/cbindgen/pull/443
     * Fixed dependency resolution with lockfile v2. https://github.com/mozilla/cbindgen/pull/438

## 0.12.0

     * Added support for #[repr(align)] and #[repr(packed)] on structs and unions. https://github.com/mozilla/cbindgen/pull/431
     * Added support to generate copy-assignment operators for enums. https://github.com/mozilla/cbindgen/pull/434

## 0.11.1

     * More binary operators and expressions are supported. https://github.com/mozilla/cbindgen/pull/425
     * More built-in bitflags operators. https://github.com/mozilla/cbindgen/pull/426

## 0.11.0

     * Made rust char map to uint32_t. https://github.com/mozilla/cbindgen/pull/424

## 0.10.1

     * Improved error message for missing config file. https://github.com/mozilla/cbindgen/pull/422
     * Add missing header for char32_t. https://github.com/mozilla/cbindgen/pull/414

## 0.10.0

     * Initialize struct literal with list-initializer for C++11 standard. https://github.com/mozilla/cbindgen/pull/401
     * Surround namespace with __cplusplus ifdef in cpp_compat mode. https://github.com/mozilla/cbindgen/pull/407
     * Add support for --quiet flag. https://github.com/mozilla/cbindgen/pull/400
     * Map char to char32_t. https://github.com/mozilla/cbindgen/pull/396
     * Improve binding_crate_ref() error message. https://github.com/mozilla/cbindgen/pull/395
     * avoid prematurely returning during expansion. https://github.com/mozilla/cbindgen/pull/389
     * Add support for adding "using namespace" statements. https://github.com/mozilla/cbindgen/pull/387

## 0.9.1

     * Various improvements to comment output. https://github.com/mozilla/cbindgen/pull/370 / https://github.com/mozilla/cbindgen/pull/375.
     * Fixed expand when ran from build.rs. https://github.com/mozilla/cbindgen/pull/371
     * More debugging output for expansion. https://github.com/mozilla/cbindgen/pull/383
     * New option to add a default private constructor in C++ tagged enums. https://github.com/mozilla/cbindgen/pull/377
     * Syn and related dependencies updated to 1.0. https://github.com/mozilla/cbindgen/pull/379

## 0.9.0

     * Support to generate C headers with C++ compatibility. https://github.com/mozilla/cbindgen/pull/349
     * Fix include guard generation when no_includes is set. https://github.com/mozilla/cbindgen/pull/352
     * Fix crate parsing order so that types from the binding crate are preferred in presence of conflicting names. https://github.com/mozilla/cbindgen/pull/355
     * Add extra_bindings option to generate bindings for dependencies. https://github.com/mozilla/cbindgen/pull/362
     * Clap dependency is optional now so it's feasible to avoid building it if cbindgen is used as a library. https://github.com/mozilla/cbindgen/pull/363

## 0.8.7

     * Require C++11 to run the test-suite (#341, test-only)
     * Improve mangling error message (#340)
     * Add the ability to automatically derive copy-constructors for tagged enums (#339)
     * Use placement new for constructing in tagged unions' helper methods (#333)

## 0.8.6

    * Fixed a panic when missing a lock file

## 0.8.5

    * Improved support for Rust 2018 modules
    * Add possibility to autogenerate tagged union destructors

## 0.8.4

    * Support for package renaming in Cargo.toml
    * Improved error messages for |cargo metadata| failures
    * Replaced 'test.py' harness with |cargo test|
    * Char constants will now be escaped properly
    * Visibility of constants will now be respected
    * Added a C99 doc comment style

## 0.8.2

     * Improvements to bitflags parsing

## 0.8.1

     * Support for manual parsing and expanding of bitflags macros
     * Support for optional tagged enum casts with asserts

## 0.8.0

    * support for 'includes' without default includes
    * removed dependency on ancient serde_derive!

## 0.7.1

    * Fix for crash when unwrapping unsupported type with associated constants

## 0.7.0

    * support for libc::ssize_t
    * fixed some warnings on nightly
    * fix for transparent associated constants
    * switched more API's to use AsRef<Path>
    * impl std::error::Error for cbindgen::Error
    * now support putting user-defined content in item bodies

## 0.6.8

    * ptrdiff_t is now a recognized primitive type
    * named function type arguments are now propagated
    * fixes for struct literals in constants
    * reserved C/C++ keywords are now escaped automatically
    * negative enum discriminants are now supported
    * fix for prefixing and formatting variant names
    * fix for snake_case formatter
    * syn update
    * doxygen style comments are now output by default
    * VaList is now a recognized primitive type
    * fix for comment processing
    * constant is propagated into array types
    * references are now supported in IR, and used for some helper method generation
    * assignment helper functions will generate array copies if necessary
