@@ -144,6 +144,49 @@ manifest key][links]* in the Cargo reference.
144
144
145
145
[links]: https://doc.rust-lang.org/cargo/reference/build-scripts.html#the-links-manifest-key
146
146
147
+ ## Features
148
+
149
+ CXX provides features to enable additional functionality such as compiling
150
+ the CXX lib with a different standard.
151
+
152
+ Features are enabled on the CXX crate for Cargo-based setups, and with compiler
153
+ options for non-Cargo setups.
154
+
155
+ The following features are available, see `[features]` section in [Cargo.toml](https://github.com/dtolnay/cxx/blob/master/Cargo.toml) for a full list:
156
+ <table>
157
+ <tr><th>feature</th><th>compiler option</th><th>description</th></tr>
158
+ <tr><td>c++14</td><td>-std=c++14 (gcc, clang), /std:c++14 (msvc)</td><td>Compile CXX lib with c++14</td></tr>
159
+ <tr><td>c++17</td><td>-std=c++17 (gcc, clang), /std:c++17 (msvc)</td><td>Compile CXX lib with c++17</td></tr>
160
+ </table>
161
+
162
+ ## Additional C++ standard features
163
+ Some addition APIs are available if compiling your code with a newer C++ standard.
164
+
165
+ Please note, that these additional APIs are automatically enabled in the `cxx.h`
166
+ header if your code is compiled with the required minimal C++ standard. They do
167
+ not depend on building the actual CXX lib against the newer standard at this time.
168
+
169
+ <table>
170
+ <tr><th>Minimal C++ standard</th><th>Description</th></tr>
171
+ <tr><td>c++17</td><td>Enables additional `string_view` APIs for `rust::str` and `rust::String`</td></tr>
172
+ </table>
173
+
174
+ Example to e.g. enable the `string_view` APIs for your code, build at least with C++17:
175
+ ```rust,noplayground
176
+ // build.rs
177
+
178
+ fn main() {
179
+ cxx_build::bridge(" src/main.rs" ) // returns a cc::Build
180
+ .file(" src/demo.cc" )
181
+ .flag_if_supported(" -std=c++17" )
182
+ .compile(" cxxbridge-demo" );
183
+
184
+ println!(" cargo:rerun-if-changed=src/main.rs" );
185
+ println!(" cargo:rerun-if-changed=src/demo.cc" );
186
+ println!(" cargo:rerun-if-changed=include/demo.h" );
187
+ }
188
+ ```
189
+
147
190
<br><br><br>
148
191
149
192
# Advanced features
0 commit comments