From 55f0210cfa00b5e2f6423f4f005615b049502c75 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 30 Sep 2025 16:48:51 -0700 Subject: [PATCH 01/20] annotate new linkage info --- .../ctime-ctime32-ctime64-wctime-wctime32-wctime64.md | 10 ++++++++-- ...me32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 10 ++++++++-- .../reference/difftime-difftime32-difftime64.md | 9 ++++++++- ...-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md | 8 +++++++- .../reference/ftime-ftime32-ftime64.md | 8 +++++++- .../reference/futime-futime32-futime64.md | 8 +++++++- .../reference/gmtime-gmtime32-gmtime64.md | 9 ++++++++- .../reference/gmtime-s-gmtime32-s-gmtime64-s.md | 9 ++++++++- .../reference/localtime-localtime32-localtime64.md | 9 ++++++++- .../localtime-s-localtime32-s-localtime64-s.md | 9 ++++++++- .../reference/mkgmtime-mkgmtime32-mkgmtime64.md | 9 ++++++++- .../reference/mktime-mktime32-mktime64.md | 9 ++++++++- docs/c-runtime-library/reference/stat-functions.md | 8 +++++++- docs/c-runtime-library/reference/strnlen-strnlen-s.md | 10 ++++++++-- .../c-runtime-library/reference/time-time32-time64.md | 9 ++++++++- .../timespec-get-timespec32-get-timespec64-get1.md | 9 ++++++++- .../utime-utime32-utime64-wutime-wutime32-wutime64.md | 11 +++++++++-- 17 files changed, 133 insertions(+), 21 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index 0b2cc7c948b..f14ab2c8924 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -17,10 +17,10 @@ Convert a time value to a string and adjust for local time zone settings. More s ## Syntax ```C -char *ctime( const time_t *sourceTime ); +char *ctime( const time_t *sourceTime ); // See note in remarks section about linkage char *_ctime32( const __time32_t *sourceTime ); char *_ctime64( const __time64_t *sourceTime ); -wchar_t *_wctime( const time_t *sourceTime ); +wchar_t *_wctime( const time_t *sourceTime ); // See note in remarks section about linkage wchar_t *_wctime32( const __time32_t *sourceTime ); wchar_t *_wctime64( const __time64_t *sourceTime ); ``` @@ -62,6 +62,12 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: ctime, _wctime + ### Generic-text routine mappings | TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index fcf23eb2ceb..669ca4102de 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -16,7 +16,7 @@ Convert a time value to a string and adjust for local time zone settings. These ## Syntax ```C -errno_t ctime_s( +errno_t ctime_s( // See note in remarks section about linkage char* buffer, size_t numberOfElements, const time_t *sourceTime @@ -31,7 +31,7 @@ errno_t _ctime64_s( size_t numberOfElements, const __time64_t *sourceTime ); -errno_t _wctime_s( +errno_t _wctime_s( // See note in remarks section about linkage wchar_t* buffer, size_t numberOfElements, const time_t *sourceTime @@ -124,6 +124,12 @@ The debug library versions of these functions first fill the buffer with 0xFE. T By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: ctime_s, _wctime_s + ### Generic-text routine mappings | TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | diff --git a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md index b5825758e25..ef234072630 100644 --- a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md +++ b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md @@ -17,7 +17,7 @@ Finds the difference between two times. ## Syntax ```C -double difftime( time_t timeEnd, time_t timeStart ); +double difftime( time_t timeEnd, time_t timeStart ); // See note in remarks section about linkage double _difftime32( __time32_t timeEnd, __time32_t timeStart ); double _difftime64( __time64_t timeEnd, __time64_t timeStart ); ``` @@ -46,6 +46,13 @@ These functions validate their parameters. If either of the parameters is zero o By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: difftime + ## Requirements | Routine | Required header | diff --git a/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md b/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md index 41ce094bccc..1d9c6e67532 100644 --- a/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md +++ b/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md @@ -16,7 +16,7 @@ Gets information about an open file. ## Syntax ```C -int _fstat( +int _fstat( // See note in remarks section about linkage int fd, struct _stat *buffer ); @@ -81,6 +81,12 @@ Unless `_USE_32BIT_TIME_T` is defined, **`_fstat`** is equivalent to **`_fstat64 By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: _fstat + ### Time type and file length type variations of `_stat` | Functions | `_USE_32BIT_TIME_T` defined? | Time type | File length type | diff --git a/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md b/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md index 7cb0247f80a..692dfa3aa2a 100644 --- a/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md +++ b/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md @@ -17,7 +17,7 @@ Get the current time. More secure versions of these functions are available; see ## Syntax ```C -void _ftime( struct _timeb *timeptr ); +void _ftime( struct _timeb *timeptr ); // See note in remarks section about linkage void _ftime32( struct __timeb32 *timeptr ); void _ftime64( struct __timeb64 *timeptr ); ``` @@ -46,6 +46,12 @@ The **`_ftime`** function is equivalent to **`_ftime64`**, and `_timeb` contains By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: _ftime + ## Requirements | Function | Required header | diff --git a/docs/c-runtime-library/reference/futime-futime32-futime64.md b/docs/c-runtime-library/reference/futime-futime32-futime64.md index a8b38058097..d43295df933 100644 --- a/docs/c-runtime-library/reference/futime-futime32-futime64.md +++ b/docs/c-runtime-library/reference/futime-futime32-futime64.md @@ -17,7 +17,7 @@ Sets the modification time on an open file. ## Syntax ```C -int _futime( +int _futime( // See note in remarks section about linkage int fd, struct _utimbuf *filetime ); @@ -51,6 +51,12 @@ The **`_futime`** routine sets the modification date and the access time on the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: _futime + ## Requirements | Function | Required header | Optional header | diff --git a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md index 1d0656b3f72..331aee5237a 100644 --- a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md +++ b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md @@ -16,7 +16,7 @@ Converts a `time_t` time value to a `tm` structure. More secure versions of thes ## Syntax ```C -struct tm *gmtime( const time_t *sourceTime ); +struct tm *gmtime( const time_t *sourceTime ); // See note in remarks section about linkage struct tm *_gmtime32( const __time32_t *sourceTime ); struct tm *_gmtime64( const __time64_t *sourceTime ); ``` @@ -56,6 +56,13 @@ The **`_gmtime32`** function breaks down the *`sourceTime`* value and stores it By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: gmtime + ## Requirements | Routine | Required C header | Required C++ header | diff --git a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md index 91517017143..4510a2090bf 100644 --- a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md +++ b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md @@ -16,7 +16,7 @@ Converts a time value to a `tm` structure. These functions are versions of [`_gm ## Syntax ```C -errno_t gmtime_s( +errno_t gmtime_s( // See note in remarks section about linkage struct tm* tmDest, const __time_t* sourceTime ); @@ -76,6 +76,13 @@ Each of the structure fields is of type **`int`**, as shown in the following tab By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: gmtime_s + ## Requirements | Routine | Required C header | Required C++ header | diff --git a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md index 746082c2ad8..c3c19a20dcc 100644 --- a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md +++ b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md @@ -17,7 +17,7 @@ Converts a time value and corrects for the local time zone. More secure versions ## Syntax ```C -struct tm *localtime( const time_t *sourceTime ); +struct tm *localtime( const time_t *sourceTime ); // See note in remarks section about linkage struct tm *_localtime32( const __time32_t *sourceTime ); struct tm *_localtime64( const __time64_t *sourceTime ); ``` @@ -72,6 +72,13 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: localtime + ## Requirements | Routine | Required C header | Required C++ header | diff --git a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md index 64aebc449d6..943d9fa96db 100644 --- a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md +++ b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md @@ -17,7 +17,7 @@ Converts a **`time_t`** time value to a **`tm`** structure, and corrects for the ## Syntax ```C -errno_t localtime_s( +errno_t localtime_s( // See note in remarks section about linkage struct tm* const tmDest, time_t const* const sourceTime ); @@ -84,6 +84,13 @@ If the **`TZ`** environment variable is set, the C run-time library assumes rule By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: localtime_s + ## Requirements | Routine | Required C header | Required C++ header | diff --git a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md index c692db99002..d7970373b52 100644 --- a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md +++ b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md @@ -16,7 +16,7 @@ Converts a UTC time represented by a **`struct tm`** to a UTC time represented b ## Syntax ```C -time_t _mkgmtime( +time_t _mkgmtime( // See note in remarks section about linkage struct tm* timeptr ); __time32_t _mkgmtime32( @@ -48,6 +48,13 @@ The range of the **`_mkgmtime32`** function is from midnight, January 1, 1970, U Both **`gmtime`** and **`localtime`** use a common static buffer for the conversion. If you supply this buffer to **`_mkgmtime`**, the previous contents are destroyed. +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: _mkgmtime + ## Examples ```C diff --git a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md index 51d9a4265a6..13214c3d9f4 100644 --- a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md +++ b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md @@ -16,7 +16,7 @@ Convert the local time to a calendar value. ## Syntax ```C -time_t mktime( +time_t mktime( // See note in remarks section about linkage struct tm *timeptr ); __time32_t _mktime32( @@ -62,6 +62,13 @@ These functions validate their parameter. If *`timeptr`* is a null pointer, the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: mktime + ## Requirements | Routine | Required header | diff --git a/docs/c-runtime-library/reference/stat-functions.md b/docs/c-runtime-library/reference/stat-functions.md index b1a5efc58ff..cf2f96d442f 100644 --- a/docs/c-runtime-library/reference/stat-functions.md +++ b/docs/c-runtime-library/reference/stat-functions.md @@ -16,7 +16,7 @@ Get status information on a file. ## Syntax ```C -int _stat( +int _stat( // See note in remarks section about linkage const char *path, struct _stat *buffer ); @@ -100,6 +100,12 @@ This function validates its parameters. If either *`path`* or *`buffer`* is `NUL By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: _stat + ### Time type and file length type variations of `_stat` | Functions | `_USE_32BIT_TIME_T` defined | Time type | File length type | diff --git a/docs/c-runtime-library/reference/strnlen-strnlen-s.md b/docs/c-runtime-library/reference/strnlen-strnlen-s.md index d74f2d71dc1..9be6378f434 100644 --- a/docs/c-runtime-library/reference/strnlen-strnlen-s.md +++ b/docs/c-runtime-library/reference/strnlen-strnlen-s.md @@ -24,7 +24,7 @@ size_t strnlen( const char *str, size_t numberOfElements ); -size_t strnlen_s( +size_t strnlen_s( // See note in remarks section about linkage const char *str, size_t numberOfElements ); @@ -32,7 +32,7 @@ size_t wcsnlen( const wchar_t *str, size_t numberOfElements ); -size_t wcsnlen_s( +size_t wcsnlen_s( // See note in remarks section about linkage const wchar_t *str, size_t numberOfElements ); @@ -88,6 +88,12 @@ Each of these functions returns the number of characters in *`str`*, not includi By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This applies to the following functions: strnlen_s, wcsnlen_s + ### Generic-text routine mappings | `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | diff --git a/docs/c-runtime-library/reference/time-time32-time64.md b/docs/c-runtime-library/reference/time-time32-time64.md index 782e7aa8359..e6618981943 100644 --- a/docs/c-runtime-library/reference/time-time32-time64.md +++ b/docs/c-runtime-library/reference/time-time32-time64.md @@ -17,7 +17,7 @@ Gets the system time. ## Syntax ```C -time_t time( time_t *destTime ); +time_t time( time_t *destTime ); // See note in remarks section about linkage __time32_t _time32( __time32_t *destTime ); __time64_t _time64( __time64_t *destTime ); ``` @@ -37,6 +37,13 @@ The **`time`** function returns the number of seconds elapsed since midnight (00 **`time`** is a wrapper for **`_time64`** and **`time_t`** is, by default, equivalent to **`__time64_t`**. If you need to force the compiler to interpret **`time_t`** as the old 32-bit **`time_t`**, you can define `_USE_32BIT_TIME_T`. We don't recommend `_USE_32BIT_TIME_T`, because your application may fail after January 18, 2038; the use of this macro isn't allowed on 64-bit platforms. +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: time + ## Requirements | Routine | Required C header | Required C++ header | diff --git a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md index e14e404ae67..7f77bc722ea 100644 --- a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md +++ b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md @@ -17,7 +17,7 @@ Sets the interval pointed to by the first argument to the current calendar time, ## Syntax ```C -int timespec_get( +int timespec_get( // See note in remarks section about linkage struct timespec* const time_spec, int const base ); @@ -55,6 +55,13 @@ These functions support only `TIME_UTC` as the *`base`* value. `TIME_UTC` sets t By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: timespec_get + ## Requirements | Routine | Required header | diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index d5a82ee0b63..7f57cbfe0bb 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -17,7 +17,7 @@ Set the file modification time. ## Syntax ```C -int _utime( +int _utime( // See note in remarks section about linkage const char *filename, struct _utimbuf *times ); @@ -29,7 +29,7 @@ int _utime64( const char *filename, struct __utimbuf64 *times ); -int _wutime( +int _wutime( // See note in remarks section about linkage const wchar_t *filename, struct _utimbuf *times ); @@ -85,6 +85,13 @@ Specific versions of the `_utimbuf` structure (`__utimbuf32` and `__utimbuf64`) By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). +> [!Note] +> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ +> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ +> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ +> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> This applies to the following functions: _utime, _wutime + ### Generic-text routine mappings | TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | From a5604957090df3838bdfaae137d785137b336816 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 Oct 2025 18:32:53 -0700 Subject: [PATCH 02/20] edits --- ...ctime32-ctime64-wctime-wctime32-wctime64.md | 18 +++++++++--------- ...ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 4 ++-- .../difftime-difftime32-difftime64.md | 9 ++++----- .../reference/ftime-ftime32-ftime64.md | 4 ++-- .../reference/futime-futime32-futime64.md | 4 ++-- .../reference/gmtime-gmtime32-gmtime64.md | 2 +- .../gmtime-s-gmtime32-s-gmtime64-s.md | 2 +- .../localtime-localtime32-localtime64.md | 2 +- .../localtime-s-localtime32-s-localtime64-s.md | 2 +- .../mkgmtime-mkgmtime32-mkgmtime64.md | 2 +- .../reference/mktime-mktime32-mktime64.md | 2 +- .../reference/strnlen-strnlen-s.md | 4 ++-- .../reference/time-time32-time64.md | 2 +- ...espec-get-timespec32-get-timespec64-get1.md | 2 +- ...utime32-utime64-wutime-wutime32-wutime64.md | 2 +- 15 files changed, 30 insertions(+), 31 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index f14ab2c8924..afaf3eb46b8 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -64,13 +64,13 @@ By default, this function's global state is scoped to the application. To change > [!Note] > Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: ctime, _wctime +> This applies to the following functions: `ctime`, `_wctime` ### Generic-text routine mappings -| TCHAR.H routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | +| `TCHAR.H` routine | `_UNICODE` and `_MBCS` not defined | `_MBCS` defined | `_UNICODE` defined | |---|---|---|---| | `_tctime` | **`ctime`** | **`ctime`** | **`_wctime`** | | `_tctime32` | **`_ctime32`** | **`_ctime32`** | **`_wctime32`** | @@ -80,12 +80,12 @@ By default, this function's global state is scoped to the application. To change | Routine | Required header | |---|---| -| **`ctime`** | \ | -| **`_ctime32`** | \ | -| **`_ctime64`** | \ | -| **`_wctime`** | \ or \ | -| **`_wctime32`** | \ or \ | -| **`_wctime64`** | \ or \ | +| **`ctime`** | `` | +| **`_ctime32`** | `` | +| **`_ctime64`** | `` | +| **`_wctime`** | `` or `` | +| **`_wctime32`** | `` or `` | +| **`_wctime64`** | `` or `` | For more compatibility information, see [Compatibility](../compatibility.md). diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index 669ca4102de..4f2921f1d44 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -126,9 +126,9 @@ By default, this function's global state is scoped to the application. To change > [!Note] > Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: ctime_s, _wctime_s +> This applies to the following functions: `ctime_s`, `_wctime_s` ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md index ef234072630..3748e01284f 100644 --- a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md +++ b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_difftime64", "difftime", "difftime64", "_difftime32", "difftime32"] helpviewer_keywords: ["_difftime32 function", "difftime function", "time, finding the difference", "difftime64 function", "_difftime64 function", "difftime32 function"] -ms.assetid: 4cc0ac2b-fc7b-42c0-8283-8c9d10c566d0 --- # `difftime`, `_difftime32`, `_difftime64` @@ -51,15 +50,15 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: difftime +> This applies to the following function: `difftime` ## Requirements | Routine | Required header | |---|---| -| **`difftime`** | \ | -| **`_difftime32`** | \ | -| **`_difftime64`** | \ | +| **`difftime`** | `` | +| **`_difftime32`** | `` | +| **`_difftime64`** | `` | For more compatibility information, see [Compatibility](../compatibility.md). diff --git a/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md b/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md index 692dfa3aa2a..49ff94a5f59 100644 --- a/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md +++ b/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md @@ -48,9 +48,9 @@ By default, this function's global state is scoped to the application. To change > [!Note] > Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: _ftime +> This applies to the following function: _ftime ## Requirements diff --git a/docs/c-runtime-library/reference/futime-futime32-futime64.md b/docs/c-runtime-library/reference/futime-futime32-futime64.md index d43295df933..516c5d29ed3 100644 --- a/docs/c-runtime-library/reference/futime-futime32-futime64.md +++ b/docs/c-runtime-library/reference/futime-futime32-futime64.md @@ -53,9 +53,9 @@ By default, this function's global state is scoped to the application. To change > [!Note] > Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: _futime +> This applies to the following function: `_futime` ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md index 331aee5237a..e20714f43fc 100644 --- a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md +++ b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md @@ -61,7 +61,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: gmtime +> This applies to the following function: `gmtime` ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md index 4510a2090bf..08e47287e5a 100644 --- a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md +++ b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md @@ -81,7 +81,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: gmtime_s +> This applies to the following function: `gmtime_s` ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md index c3c19a20dcc..bdc4a3d545b 100644 --- a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md +++ b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md @@ -77,7 +77,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: localtime +> This applies to the following function: `localtime` ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md index 943d9fa96db..0ed83432d92 100644 --- a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md +++ b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md @@ -89,7 +89,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: localtime_s +> This applies to the following function: `localtime_s` ## Requirements diff --git a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md index d7970373b52..01a0c7f841e 100644 --- a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md +++ b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md @@ -53,7 +53,7 @@ Both **`gmtime`** and **`localtime`** use a common static buffer for the convers > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: _mkgmtime +> This applies to the following function: `_mkgmtime` ## Examples diff --git a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md index 13214c3d9f4..e59f3af154e 100644 --- a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md +++ b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md @@ -67,7 +67,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: mktime +> This applies to the following function: `mktime` ## Requirements diff --git a/docs/c-runtime-library/reference/strnlen-strnlen-s.md b/docs/c-runtime-library/reference/strnlen-strnlen-s.md index 9be6378f434..aaed1512438 100644 --- a/docs/c-runtime-library/reference/strnlen-strnlen-s.md +++ b/docs/c-runtime-library/reference/strnlen-strnlen-s.md @@ -90,9 +90,9 @@ By default, this function's global state is scoped to the application. To change > [!Note] > Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: strnlen_s, wcsnlen_s +> This applies to the following functions: `strnlen_s`, `wcsnlen_s` ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/time-time32-time64.md b/docs/c-runtime-library/reference/time-time32-time64.md index e6618981943..039dd0766a0 100644 --- a/docs/c-runtime-library/reference/time-time32-time64.md +++ b/docs/c-runtime-library/reference/time-time32-time64.md @@ -42,7 +42,7 @@ The **`time`** function returns the number of seconds elapsed since midnight (00 > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: time +> This applies to the following function: `time` ## Requirements diff --git a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md index 7f77bc722ea..101fb52c6b9 100644 --- a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md +++ b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md @@ -60,7 +60,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: timespec_get +> This applies to the following function: `timespec_get` ## Requirements diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index 7f57cbfe0bb..f12ecd9a9dd 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -90,7 +90,7 @@ By default, this function's global state is scoped to the application. To change > You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ > You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ > This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following functions: _utime, _wutime +> This applies to the following functions: `_utime`, `_wutime` ### Generic-text routine mappings From cffe2080657d7f058f9564f119ac50c738d84739 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 Oct 2025 18:57:35 -0700 Subject: [PATCH 03/20] remove changes from _fstat and _stat --- ...stat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md | 8 +------- docs/c-runtime-library/reference/stat-functions.md | 8 +------- 2 files changed, 2 insertions(+), 14 deletions(-) diff --git a/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md b/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md index 1d9c6e67532..41ce094bccc 100644 --- a/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md +++ b/docs/c-runtime-library/reference/fstat-fstat32-fstat64-fstati64-fstat32i64-fstat64i32.md @@ -16,7 +16,7 @@ Gets information about an open file. ## Syntax ```C -int _fstat( // See note in remarks section about linkage +int _fstat( int fd, struct _stat *buffer ); @@ -81,12 +81,6 @@ Unless `_USE_32BIT_TIME_T` is defined, **`_fstat`** is equivalent to **`_fstat64 By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -> [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: _fstat - ### Time type and file length type variations of `_stat` | Functions | `_USE_32BIT_TIME_T` defined? | Time type | File length type | diff --git a/docs/c-runtime-library/reference/stat-functions.md b/docs/c-runtime-library/reference/stat-functions.md index cf2f96d442f..b1a5efc58ff 100644 --- a/docs/c-runtime-library/reference/stat-functions.md +++ b/docs/c-runtime-library/reference/stat-functions.md @@ -16,7 +16,7 @@ Get status information on a file. ## Syntax ```C -int _stat( // See note in remarks section about linkage +int _stat( const char *path, struct _stat *buffer ); @@ -100,12 +100,6 @@ This function validates its parameters. If either *`path`* or *`buffer`* is `NUL By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -> [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1`before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: _stat - ### Time type and file length type variations of `_stat` | Functions | `_USE_32BIT_TIME_T` defined | Time type | File length type | From 09cc7d71af0dc5f64a18586ee9b1d67f1ab93251 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 1 Oct 2025 19:21:17 -0700 Subject: [PATCH 04/20] remove another --- docs/c-runtime-library/reference/ftime-ftime32-ftime64.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md b/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md index 49ff94a5f59..7cb0247f80a 100644 --- a/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md +++ b/docs/c-runtime-library/reference/ftime-ftime32-ftime64.md @@ -17,7 +17,7 @@ Get the current time. More secure versions of these functions are available; see ## Syntax ```C -void _ftime( struct _timeb *timeptr ); // See note in remarks section about linkage +void _ftime( struct _timeb *timeptr ); void _ftime32( struct __timeb32 *timeptr ); void _ftime64( struct __timeb64 *timeptr ); ``` @@ -46,12 +46,6 @@ The **`_ftime`** function is equivalent to **`_ftime64`**, and `_timeb` contains By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -> [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ -> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: _ftime - ## Requirements | Function | Required header | From c67cfc80a9782e6dc35bae0782af5fa1a83ebe25 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 7 Oct 2025 14:25:20 -0700 Subject: [PATCH 05/20] more uniform wording --- .../ctime-ctime32-ctime64-wctime-wctime32-wctime64.md | 4 ++-- ...-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 2 +- .../reference/difftime-difftime32-difftime64.md | 7 +++---- .../reference/futime-futime32-futime64.md | 2 +- .../reference/gmtime-gmtime32-gmtime64.md | 7 +++---- .../reference/gmtime-s-gmtime32-s-gmtime64-s.md | 7 +++---- .../reference/localtime-localtime32-localtime64.md | 7 +++---- .../reference/localtime-s-localtime32-s-localtime64-s.md | 7 +++---- .../reference/mkgmtime-mkgmtime32-mkgmtime64.md | 8 +++----- .../reference/mktime-mktime32-mktime64.md | 7 +++---- docs/c-runtime-library/reference/strnlen-strnlen-s.md | 4 ++-- docs/c-runtime-library/reference/time-time32-time64.md | 7 +++---- .../timespec-get-timespec32-get-timespec64-get1.md | 7 +++---- .../utime-utime32-utime64-wutime-wutime32-wutime64.md | 7 +++---- 14 files changed, 36 insertions(+), 47 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index afaf3eb46b8..a01f93a70b2 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -62,8 +62,8 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). -> [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +>> [!Note] +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following functions: `ctime`, `_wctime` diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index 4f2921f1d44..503448e71d6 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -125,7 +125,7 @@ The debug library versions of these functions first fill the buffer with 0xFE. T By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following functions: `ctime_s`, `_wctime_s` diff --git a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md index 3748e01284f..c6967a50310 100644 --- a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md +++ b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md @@ -46,10 +46,9 @@ These functions validate their parameters. If either of the parameters is zero o By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `difftime` ## Requirements diff --git a/docs/c-runtime-library/reference/futime-futime32-futime64.md b/docs/c-runtime-library/reference/futime-futime32-futime64.md index 516c5d29ed3..900ff0928b5 100644 --- a/docs/c-runtime-library/reference/futime-futime32-futime64.md +++ b/docs/c-runtime-library/reference/futime-futime32-futime64.md @@ -52,7 +52,7 @@ The **`_futime`** routine sets the modification date and the access time on the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `_futime` diff --git a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md index e20714f43fc..0cfc741f854 100644 --- a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md +++ b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md @@ -57,10 +57,9 @@ The **`_gmtime32`** function breaks down the *`sourceTime`* value and stores it By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `gmtime` ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md index 08e47287e5a..32875956867 100644 --- a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md +++ b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md @@ -77,10 +77,9 @@ Each of the structure fields is of type **`int`**, as shown in the following tab By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `gmtime_s` ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md index bdc4a3d545b..2d3dbc27eb4 100644 --- a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md +++ b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md @@ -73,10 +73,9 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `localtime` ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md index 0ed83432d92..581c2ca842b 100644 --- a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md +++ b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md @@ -85,10 +85,9 @@ If the **`TZ`** environment variable is set, the C run-time library assumes rule By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `localtime_s` ## Requirements diff --git a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md index 01a0c7f841e..84451aaddbe 100644 --- a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md +++ b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md @@ -49,11 +49,9 @@ The range of the **`_mkgmtime32`** function is from midnight, January 1, 1970, U Both **`gmtime`** and **`localtime`** use a common static buffer for the conversion. If you supply this buffer to **`_mkgmtime`**, the previous contents are destroyed. > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ -> This applies to the following function: `_mkgmtime` +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\> This applies to the following function: `_mkgmtime` ## Examples diff --git a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md index e59f3af154e..330bd1b43e7 100644 --- a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md +++ b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md @@ -63,10 +63,9 @@ These functions validate their parameter. If *`timeptr`* is a null pointer, the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `mktime` ## Requirements diff --git a/docs/c-runtime-library/reference/strnlen-strnlen-s.md b/docs/c-runtime-library/reference/strnlen-strnlen-s.md index aaed1512438..12bc64a65c6 100644 --- a/docs/c-runtime-library/reference/strnlen-strnlen-s.md +++ b/docs/c-runtime-library/reference/strnlen-strnlen-s.md @@ -89,9 +89,9 @@ Each of these functions returns the number of characters in *`str`*, not includi By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting with Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are now declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\> This applies to the following functions: `strnlen_s`, `wcsnlen_s` > This applies to the following functions: `strnlen_s`, `wcsnlen_s` ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/time-time32-time64.md b/docs/c-runtime-library/reference/time-time32-time64.md index 039dd0766a0..ca0e2ca4f54 100644 --- a/docs/c-runtime-library/reference/time-time32-time64.md +++ b/docs/c-runtime-library/reference/time-time32-time64.md @@ -38,10 +38,9 @@ The **`time`** function returns the number of seconds elapsed since midnight (00 **`time`** is a wrapper for **`_time64`** and **`time_t`** is, by default, equivalent to **`__time64_t`**. If you need to force the compiler to interpret **`time_t`** as the old 32-bit **`time_t`**, you can define `_USE_32BIT_TIME_T`. We don't recommend `_USE_32BIT_TIME_T`, because your application may fail after January 18, 2038; the use of this macro isn't allowed on 64-bit platforms. > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `time` ## Requirements diff --git a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md index 101fb52c6b9..65d4234deff 100644 --- a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md +++ b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md @@ -56,10 +56,9 @@ These functions support only `TIME_UTC` as the *`base`* value. `TIME_UTC` sets t By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following function: `timespec_get` ## Requirements diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index f12ecd9a9dd..4b032490d1d 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -86,10 +86,9 @@ Specific versions of the `_utimbuf` structure (`__utimbuf32` and `__utimbuf64`) By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> Starting in Visual Studio 2025 and the Windows SDK 26000, this function changes from declaring the function (or functions for multi-function pages) with `static inline` to `inline`.\ -> You can opt-out of the change for your project by defining `_STATIC_INLINE_UCRT_FUNCTIONS=1`.\ -> You can adopt the change early by defining `_STATIC_INLINE_UCRT_FUNCTIONS=0`.\ -> This change improves conformance and helps avoid One Definition Rule (ODR) violations, especially when using modules.\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ > This applies to the following functions: `_utime`, `_wutime` ### Generic-text routine mappings From 6b125cbc4823dfb12acb935dc042e43a86253030 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 7 Oct 2025 14:50:27 -0700 Subject: [PATCH 06/20] more finesse --- .../ctime-ctime32-ctime64-wctime-wctime32-wctime64.md | 6 ++---- ...-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 5 ++--- .../reference/difftime-difftime32-difftime64.md | 5 ++--- .../c-runtime-library/reference/futime-futime32-futime64.md | 5 ++--- .../c-runtime-library/reference/gmtime-gmtime32-gmtime64.md | 5 ++--- .../reference/gmtime-s-gmtime32-s-gmtime64-s.md | 5 ++--- .../reference/localtime-localtime32-localtime64.md | 5 ++--- .../reference/localtime-s-localtime32-s-localtime64-s.md | 5 ++--- .../reference/mkgmtime-mkgmtime32-mkgmtime64.md | 4 ++-- .../c-runtime-library/reference/mktime-mktime32-mktime64.md | 5 ++--- docs/c-runtime-library/reference/strnlen-strnlen-s.md | 5 ++--- docs/c-runtime-library/reference/time-time32-time64.md | 6 ++---- .../timespec-get-timespec32-get-timespec64-get1.md | 5 ++--- .../utime-utime32-utime64-wutime-wutime32-wutime64.md | 6 ++---- 14 files changed, 28 insertions(+), 44 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index a01f93a70b2..2d49bc3a153 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["_wctime64", "_ctime32", "_tctime", "_wctime", "_wctime32", "_tctime64", "_ctime64", "ctime"] helpviewer_keywords: ["tctime64 function", "_ctime32 function", "ctime32 function", "_wctime function", "wctime64 function", "_tctime64 function", "_tctime32 function", "_ctime64 function", "_wctime64 function", "ctime function", "wctime32 function", "ctime64 function", "_wctime32 function", "_tctime function", "tctime32 function", "tctime function", "wctime function", "time, converting"] -ms.assetid: 2423de37-a35c-4f0a-a378-3116bc120a9d --- # `ctime`, `_ctime32`, `_ctime64`, `_wctime`, `_wctime32`, `_wctime64` @@ -63,10 +62,9 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). >> [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime` and `_wctime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: `ctime`, `_wctime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index 503448e71d6..00f36630373 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -125,10 +125,9 @@ The debug library versions of these functions first fill the buffer with 0xFE. T By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime_s` and `_wctime_s` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: `ctime_s`, `_wctime_s` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md index c6967a50310..4abb115de76 100644 --- a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md +++ b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md @@ -46,10 +46,9 @@ These functions validate their parameters. If either of the parameters is zero o By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `difftime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `difftime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/futime-futime32-futime64.md b/docs/c-runtime-library/reference/futime-futime32-futime64.md index 900ff0928b5..24adf3ac898 100644 --- a/docs/c-runtime-library/reference/futime-futime32-futime64.md +++ b/docs/c-runtime-library/reference/futime-futime32-futime64.md @@ -52,10 +52,9 @@ The **`_futime`** routine sets the modification date and the access time on the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_futime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `_futime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md index 0cfc741f854..f180708ab73 100644 --- a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md +++ b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md @@ -57,10 +57,9 @@ The **`_gmtime32`** function breaks down the *`sourceTime`* value and stores it By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `gmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `gmtime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md index 32875956867..5fa95ab1bdb 100644 --- a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md +++ b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md @@ -77,10 +77,9 @@ Each of the structure fields is of type **`int`**, as shown in the following tab By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `gmtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `gmtime_s` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md index 2d3dbc27eb4..7c94fbd8479 100644 --- a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md +++ b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md @@ -73,10 +73,9 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `localtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `localtime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md index 581c2ca842b..81137b6dbd7 100644 --- a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md +++ b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md @@ -85,10 +85,9 @@ If the **`TZ`** environment variable is set, the C run-time library assumes rule By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `localtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `localtime_s` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md index 84451aaddbe..098f806f2a5 100644 --- a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md +++ b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md @@ -49,9 +49,9 @@ The range of the **`_mkgmtime32`** function is from midnight, January 1, 1970, U Both **`gmtime`** and **`localtime`** use a common static buffer for the conversion. If you supply this buffer to **`_mkgmtime`**, the previous contents are destroyed. > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_mkgmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\> This applies to the following function: `_mkgmtime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Examples diff --git a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md index 330bd1b43e7..4c0571ac8a6 100644 --- a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md +++ b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md @@ -63,10 +63,9 @@ These functions validate their parameter. If *`timeptr`* is a null pointer, the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `mktime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `mktime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/strnlen-strnlen-s.md b/docs/c-runtime-library/reference/strnlen-strnlen-s.md index 12bc64a65c6..c4da83ce486 100644 --- a/docs/c-runtime-library/reference/strnlen-strnlen-s.md +++ b/docs/c-runtime-library/reference/strnlen-strnlen-s.md @@ -89,10 +89,9 @@ Each of these functions returns the number of characters in *`str`*, not includi By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `strnlen_s` and `wcsnlen_s` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\> This applies to the following functions: `strnlen_s`, `wcsnlen_s` -> This applies to the following functions: `strnlen_s`, `wcsnlen_s` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/time-time32-time64.md b/docs/c-runtime-library/reference/time-time32-time64.md index ca0e2ca4f54..a017ab031aa 100644 --- a/docs/c-runtime-library/reference/time-time32-time64.md +++ b/docs/c-runtime-library/reference/time-time32-time64.md @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["TIME/time", "TIME/_time32", "TIME/_time64", "time", "_time32", "_time64"] helpviewer_keywords: ["time32 function", "_time32 function", "_time64 function", "time functions", "system time", "time64 function"] -ms.assetid: 280e00f2-2b93-4ece-94cd-e048484c6cc7 --- # `time`, `_time32`, `_time64` @@ -38,10 +37,9 @@ The **`time`** function returns the number of seconds elapsed since midnight (00 **`time`** is a wrapper for **`_time64`** and **`time_t`** is, by default, equivalent to **`__time64_t`**. If you need to force the compiler to interpret **`time_t`** as the old 32-bit **`time_t`**, you can define `_USE_32BIT_TIME_T`. We don't recommend `_USE_32BIT_TIME_T`, because your application may fail after January 18, 2038; the use of this macro isn't allowed on 64-bit platforms. > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `time` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `time` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md index 65d4234deff..1bb336cebac 100644 --- a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md +++ b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md @@ -56,10 +56,9 @@ These functions support only `TIME_UTC` as the *`base`* value. `TIME_UTC` sets t By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `timespec_get` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following function: `timespec_get` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index 4b032490d1d..d451db3be4b 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -8,7 +8,6 @@ api_type: ["DLLExport"] topic_type: ["apiref"] f1_keywords: ["UTIME/_utime", "UTIME/_utime32", "UTIME/_utime64", "UTIME/_wutime", "UTIME/_wutime32", "UTIME/_wutime64", "TCHAR/_tutime", "TCHAR/_tutime32", "TCHAR/_tutime64", "_utime", "_utime32", "_utime64", "_wutime", "_wutime32", "_wutime64", "_tutime", "_tutime32", "_tutime64"] helpviewer_keywords: ["tutime function", "utime32 function", "utime64 function", "_utime function", "_tutime32 function", "time [C++], file modification", "wutime function", "_wutime function", "_wutime32 function", "_tutime64 function", "_tutime function", "files [C++], modification time", "_wutime64 function", "_utime32 function", "utime function", "_utime64 function", "wutime64 function", "wutime32 function", "tutime64 function", "tutime32 function"] -ms.assetid: 8d482d40-19b9-4591-bfee-5d7f601d1a9e --- # `_utime`, `_utime32`, `_utime64`, `_wutime`, `_wutime32`, `_wutime64` @@ -86,10 +85,9 @@ Specific versions of the `_utimbuf` structure (`__utimbuf32` and `__utimbuf64`) By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, the following functions are no longer declared as `static inline` (internal linkage). Instead, they are declared as `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_utime` and `_wutime` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules.\ -> This applies to the following functions: `_utime`, `_wutime` +> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. ### Generic-text routine mappings From c575f428325a83b9cf9e647011dc2949f155933f Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 7 Oct 2025 15:00:00 -0700 Subject: [PATCH 07/20] edit --- .../reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md | 2 +- ...time-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 2 +- .../reference/difftime-difftime32-difftime64.md | 2 +- docs/c-runtime-library/reference/futime-futime32-futime64.md | 2 +- docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md | 2 +- .../reference/gmtime-s-gmtime32-s-gmtime64-s.md | 2 +- .../reference/localtime-localtime32-localtime64.md | 2 +- .../reference/localtime-s-localtime32-s-localtime64-s.md | 2 +- .../reference/mkgmtime-mkgmtime32-mkgmtime64.md | 2 +- docs/c-runtime-library/reference/mktime-mktime32-mktime64.md | 2 +- docs/c-runtime-library/reference/strnlen-strnlen-s.md | 2 +- docs/c-runtime-library/reference/time-time32-time64.md | 2 +- .../reference/timespec-get-timespec32-get-timespec64-get1.md | 2 +- .../reference/utime-utime32-utime64-wutime-wutime32-wutime64.md | 2 +- 14 files changed, 14 insertions(+), 14 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index 2d49bc3a153..94fb51c5db2 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -64,7 +64,7 @@ By default, this function's global state is scoped to the application. To change >> [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime` and `_wctime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index 00f36630373..344332fb27b 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -127,7 +127,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime_s` and `_wctime_s` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md index 4abb115de76..1eb22965f30 100644 --- a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md +++ b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md @@ -48,7 +48,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `difftime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/futime-futime32-futime64.md b/docs/c-runtime-library/reference/futime-futime32-futime64.md index 24adf3ac898..71e48e02fdc 100644 --- a/docs/c-runtime-library/reference/futime-futime32-futime64.md +++ b/docs/c-runtime-library/reference/futime-futime32-futime64.md @@ -54,7 +54,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_futime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md index f180708ab73..aaf84a4d8cc 100644 --- a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md +++ b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md @@ -59,7 +59,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `gmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md index 5fa95ab1bdb..dd7a15de33e 100644 --- a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md +++ b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md @@ -79,7 +79,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `gmtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md index 7c94fbd8479..fbd9bbc8ae2 100644 --- a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md +++ b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md @@ -75,7 +75,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `localtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md index 81137b6dbd7..4907ef32f45 100644 --- a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md +++ b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md @@ -87,7 +87,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `localtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md index 098f806f2a5..63e68cc2503 100644 --- a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md +++ b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md @@ -51,7 +51,7 @@ Both **`gmtime`** and **`localtime`** use a common static buffer for the convers > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_mkgmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Examples diff --git a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md index 4c0571ac8a6..eb4af0a38fc 100644 --- a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md +++ b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md @@ -65,7 +65,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `mktime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/strnlen-strnlen-s.md b/docs/c-runtime-library/reference/strnlen-strnlen-s.md index c4da83ce486..12b2cedae88 100644 --- a/docs/c-runtime-library/reference/strnlen-strnlen-s.md +++ b/docs/c-runtime-library/reference/strnlen-strnlen-s.md @@ -91,7 +91,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `strnlen_s` and `wcsnlen_s` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ### Generic-text routine mappings diff --git a/docs/c-runtime-library/reference/time-time32-time64.md b/docs/c-runtime-library/reference/time-time32-time64.md index a017ab031aa..049d5450138 100644 --- a/docs/c-runtime-library/reference/time-time32-time64.md +++ b/docs/c-runtime-library/reference/time-time32-time64.md @@ -39,7 +39,7 @@ The **`time`** function returns the number of seconds elapsed since midnight (00 > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `time` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md index 1bb336cebac..ebc60ea0b92 100644 --- a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md +++ b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md @@ -58,7 +58,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `timespec_get` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ## Requirements diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index d451db3be4b..5b00d4e1d83 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -87,7 +87,7 @@ By default, this function's global state is scoped to the application. To change > [!Note] > When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_utime` and `_wutime` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ -> This change increases UCRT conformance with the C++ standard, while also improving compatibility with C++ modules. +> This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. ### Generic-text routine mappings From d4bc3177059431a376dadde8d231e06c15f08674 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Tue, 7 Oct 2025 15:29:32 -0700 Subject: [PATCH 08/20] edits --- ...time-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 2 +- .../reference/utime-utime32-utime64-wutime-wutime32-wutime64.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index 344332fb27b..af343d723c7 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -125,7 +125,7 @@ The debug library versions of these functions first fill the buffer with 0xFE. T By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime_s` and `_wctime_s` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime_s` and `_wctime_s` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index 5b00d4e1d83..07641eeece6 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -85,7 +85,7 @@ Specific versions of the `_utimbuf` structure (`__utimbuf32` and `__utimbuf64`) By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_utime` and `_wutime` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ +> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_utime` and `_wutime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. From b33610859ded8295e5e36b48fefdca2a8c44e42e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Wed, 22 Oct 2025 19:31:50 -0700 Subject: [PATCH 09/20] stubs --- .../create-cpp-app-with-github-copilot.md | 190 ++++++++++++++++++ docs/get-started/toc.yml | 2 + 2 files changed, 192 insertions(+) create mode 100644 docs/build/create-cpp-app-with-github-copilot.md diff --git a/docs/build/create-cpp-app-with-github-copilot.md b/docs/build/create-cpp-app-with-github-copilot.md new file mode 100644 index 00000000000..8ad4b6af3ff --- /dev/null +++ b/docs/build/create-cpp-app-with-github-copilot.md @@ -0,0 +1,190 @@ +--- +title: Create a C++ app with Copilot +description: "Learn how to use Copilot to create your first C++ app using Microsoft C++ in Visual Studio." +ms.date: 10/22/2025 +ms.topic: "tutorial" +ms.custom: + - "mvc" + - copilot-scenario-highlight +--- +# Create a C++ app with Copilot + +The usual starting point for a C++ programmer is a "Hello, world!" application that runs on the command line. That's what you create in Visual Studio in this step. + +## Prerequisites + +- The **Desktop development with C++** workload must be installed to make the **Console App (C++)** project type available. If it's not installed, see [Install C++ support in Visual Studio](vscpp-step-0-installation.md). + +## Create your project + +Visual Studio uses *projects* to organize the code for an app, and *solutions* to organize your projects. A project contains all the options, configurations, and rules used to build your apps. It manages the relationship between all the project's files and any external files. To create your app, first, create a new project and solution. + +1. In Visual Studio, open the **File** menu and choose **New > Project** to open the **Create a new Project** dialog. Select the **Console App** template that has **C++**, **Windows**, and **Console** tags, and then choose **Next**. + + :::image type="complex" source="media/vs2019-choose-console-app.png" alt-text="Screenshot of the create a new project dialog."::: + The create a new project dialog with the Console App template selected. That template says: Run code in a windows terminal. Prints hello world by default. Has the tags c++, Windows, and Console. + :::image-end::: + + The **Desktop development with C++** workload must be installed for the C++ Console App template to show up. See [Install C++ support in Visual Studio](vscpp-step-0-installation.md) if you haven't already installed it. + +1. In the **Configure your new project** dialog, enter *HelloCopilot* in the **Project name** edit box. Choose **Create** to create the project. + + :::image type="complex" source="media/vs2019-configure-new-project-hello-world.png" alt-text="Screenshot of Configure your new project dialog."::: + The Configure your new project dialog with HelloWorld entered into the Project name field. + :::image-end::: + + Visual Studio creates a new project. It's ready for you to add and edit your source code. By default, the Console App template provides source code for a "Hello World" app, like this: + + :::image type="complex" source="media/vs2019-hello-world-code.png" alt-text="Screenshot of the NEW Hello World project."::: + Shows the new project. The HelloWorld.cpp file is open, showing the default code that is included with this template. That code consists of #include iostream and a main() function that contains the line: std::cout << quote hello world!\n quote; + :::image-end::: + + When the code looks like this in the editor, you're ready to go on to the next step and use Copilot top build an app. + +You can use GitHub Copilot in Visual Studio to help with your C++ development. Copilot is an AI-powered coding assistant that helps you write code faster, reduce errors, and explore new solutions. + +Some benefits of using Copilot when coding in C++: +- Generate entire C++ functions or classes as you type. +- Suggest code completions based on plain-language comments or prompts. +- Get help with complex algorithms, data structures, and standard library usage. +- Learn new APIs and modern C++ patterns through in-context examples. +- Receive context-aware suggestions based on your comments or code. +- Debug errors in your code. +- Simplify and refactor existing code. + +To install GitHub Copilot, see [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states). + +## Use Copilot to create a Conway Life app + + +## Prompting + +Replace the default "Hello, World!" code with a simple implementation of Conway's Game of Life. You can do this by prompting Copilot with comments that describe the functionality you want. Here's an example of how to prompt Copilot to generate the code: + + +```cpp +// Code generated by GitHub Copilot +#include +#include +#include +#include // for _kbhit and _getch + +using namespace std; + +int step = 0; +const int rows = 20; +const int cols = 40; + +void printGrid(int grid[rows][cols]) +{ + cout << "Step: " << step << endl; + for (int i = 0; i < rows; ++i) + { + for (int j = 0; j < cols; ++j) + { + cout << (grid[i][j] ? '*' : ' '); + } + cout << endl; + } +} + +int countNeighbors(int grid[rows][cols], int x, int y) +{ + int count = 0; + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1; ++j) + { + if (i == 0 && j == 0) + { + continue; + } + + int ni = x + i; + int nj = y + j; + if (ni >= 0 && ni < rows && nj >= 0 && nj < cols) + { + count += grid[ni][nj]; + } + } + } + return count; +} + +void updateGrid(int grid[rows][cols]) +{ + int newGrid[rows][cols] = { 0 }; + for (int i = 0; i < rows; ++i) + { + for (int j = 0; j < cols; ++j) + { + int neighbors = countNeighbors(grid, i, j); + if (grid[i][j] == 1) + { + newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1; + } + else + { + newGrid[i][j] = (neighbors == 3) ? 1 : 0; + } + } + } + // Copy newGrid back to grid + for (int i = 0; i < rows; ++i) + { + for (int j = 0; j < cols; ++j) + { + grid[i][j] = newGrid[i][j]; + } + } +} + +int main() +{ + int grid[rows][cols] = { 0 }; + + // Initial configuration (a simple glider) + grid[1][2] = 1; + grid[2][3] = 1; + grid[3][1] = 1; + grid[3][2] = 1; + grid[3][3] = 1; + + while (true) + { + if (_kbhit()) // Check if a key has been pressed + { + _getch(); // Consume the key + break; // Exit the loop + } + printGrid(grid); + updateGrid(grid); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + cout << "\033[H\033[J"; // Clear the screen + step++; + } + + return 0; +} +``` + + +## Next steps + +> [!div class="nextstepaction"] +> [Build and run a C++ project](vscpp-step-2-build.md) + +## Troubleshooting guide + +Come here for solutions to common issues when you create your first C++ project. + +### Create your app project: issues + +The **New Project** dialog should show a **Console App** template that has **C++**, **Windows**, and **Console** tags. If you don't see it, there are two possible causes. It might be filtered out of the list, or it might not be installed. First, check the filter dropdowns at the top of the list of templates. Set them to **C++**, **Windows**, and **Console**. The C++ **Console App** template should appear; otherwise, the **Desktop development with C++** workload isn't installed. + +To install **Desktop development with C++**, you can run the installer right from the **New Project** dialog. Choose the **Install more tools and features** link at the bottom of the template list to start the installer. If the **User Account Control** dialog requests permissions, choose **Yes**. In the installer, make sure the **Desktop development with C++** workload is checked. Then choose **Modify** to update your Visual Studio installation. + +If another project with the same name already exists, choose another name for your project. Or, delete the existing project and try again. To delete an existing project, delete the solution folder (the folder that contains the `helloworld.sln` file) in File Explorer. + +[Go back](#create-your-app-project). + diff --git a/docs/get-started/toc.yml b/docs/get-started/toc.yml index 49961e13203..2944683f36f 100644 --- a/docs/get-started/toc.yml +++ b/docs/get-started/toc.yml @@ -6,6 +6,8 @@ items: href: ../build/vscpp-step-0-installation.md - name: Visual Studio guided tour href: /visualstudio/get-started/visual-studio-ide + - name: Create a C++ app with Copilot + href: ../build/create-cpp-app-with-github-copilot.md - name: Create and edit a C++ console app project href: ../build/vscpp-step-1-create.md - name: Build and run a C++ console app project From f4ca46e7f6fefaa804248625f13eac7a3e05255c Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 23 Oct 2025 16:28:06 -0700 Subject: [PATCH 10/20] new topic --- .../create-cpp-app-with-github-copilot.md | 190 -------------- docs/build/image.png | Bin 0 -> 27687 bytes docs/build/media/Conway-Life-exe.png | Bin 0 -> 5189 bytes .../github-copilot-fix-warning-accept.png | Bin 0 -> 16661 bytes .../media/github-copilot-fix-warning.png | Bin 0 -> 22327 bytes docs/build/media/github-copilot-open-chat.png | Bin 0 -> 11248 bytes ...e-github-copilot-create-cpp-console-app.md | 247 ++++++++++++++++++ docs/get-started/toc.yml | 4 +- 8 files changed, 249 insertions(+), 192 deletions(-) delete mode 100644 docs/build/create-cpp-app-with-github-copilot.md create mode 100644 docs/build/image.png create mode 100644 docs/build/media/Conway-Life-exe.png create mode 100644 docs/build/media/github-copilot-fix-warning-accept.png create mode 100644 docs/build/media/github-copilot-fix-warning.png create mode 100644 docs/build/media/github-copilot-open-chat.png create mode 100644 docs/build/use-github-copilot-create-cpp-console-app.md diff --git a/docs/build/create-cpp-app-with-github-copilot.md b/docs/build/create-cpp-app-with-github-copilot.md deleted file mode 100644 index 8ad4b6af3ff..00000000000 --- a/docs/build/create-cpp-app-with-github-copilot.md +++ /dev/null @@ -1,190 +0,0 @@ ---- -title: Create a C++ app with Copilot -description: "Learn how to use Copilot to create your first C++ app using Microsoft C++ in Visual Studio." -ms.date: 10/22/2025 -ms.topic: "tutorial" -ms.custom: - - "mvc" - - copilot-scenario-highlight ---- -# Create a C++ app with Copilot - -The usual starting point for a C++ programmer is a "Hello, world!" application that runs on the command line. That's what you create in Visual Studio in this step. - -## Prerequisites - -- The **Desktop development with C++** workload must be installed to make the **Console App (C++)** project type available. If it's not installed, see [Install C++ support in Visual Studio](vscpp-step-0-installation.md). - -## Create your project - -Visual Studio uses *projects* to organize the code for an app, and *solutions* to organize your projects. A project contains all the options, configurations, and rules used to build your apps. It manages the relationship between all the project's files and any external files. To create your app, first, create a new project and solution. - -1. In Visual Studio, open the **File** menu and choose **New > Project** to open the **Create a new Project** dialog. Select the **Console App** template that has **C++**, **Windows**, and **Console** tags, and then choose **Next**. - - :::image type="complex" source="media/vs2019-choose-console-app.png" alt-text="Screenshot of the create a new project dialog."::: - The create a new project dialog with the Console App template selected. That template says: Run code in a windows terminal. Prints hello world by default. Has the tags c++, Windows, and Console. - :::image-end::: - - The **Desktop development with C++** workload must be installed for the C++ Console App template to show up. See [Install C++ support in Visual Studio](vscpp-step-0-installation.md) if you haven't already installed it. - -1. In the **Configure your new project** dialog, enter *HelloCopilot* in the **Project name** edit box. Choose **Create** to create the project. - - :::image type="complex" source="media/vs2019-configure-new-project-hello-world.png" alt-text="Screenshot of Configure your new project dialog."::: - The Configure your new project dialog with HelloWorld entered into the Project name field. - :::image-end::: - - Visual Studio creates a new project. It's ready for you to add and edit your source code. By default, the Console App template provides source code for a "Hello World" app, like this: - - :::image type="complex" source="media/vs2019-hello-world-code.png" alt-text="Screenshot of the NEW Hello World project."::: - Shows the new project. The HelloWorld.cpp file is open, showing the default code that is included with this template. That code consists of #include iostream and a main() function that contains the line: std::cout << quote hello world!\n quote; - :::image-end::: - - When the code looks like this in the editor, you're ready to go on to the next step and use Copilot top build an app. - -You can use GitHub Copilot in Visual Studio to help with your C++ development. Copilot is an AI-powered coding assistant that helps you write code faster, reduce errors, and explore new solutions. - -Some benefits of using Copilot when coding in C++: -- Generate entire C++ functions or classes as you type. -- Suggest code completions based on plain-language comments or prompts. -- Get help with complex algorithms, data structures, and standard library usage. -- Learn new APIs and modern C++ patterns through in-context examples. -- Receive context-aware suggestions based on your comments or code. -- Debug errors in your code. -- Simplify and refactor existing code. - -To install GitHub Copilot, see [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states). - -## Use Copilot to create a Conway Life app - - -## Prompting - -Replace the default "Hello, World!" code with a simple implementation of Conway's Game of Life. You can do this by prompting Copilot with comments that describe the functionality you want. Here's an example of how to prompt Copilot to generate the code: - - -```cpp -// Code generated by GitHub Copilot -#include -#include -#include -#include // for _kbhit and _getch - -using namespace std; - -int step = 0; -const int rows = 20; -const int cols = 40; - -void printGrid(int grid[rows][cols]) -{ - cout << "Step: " << step << endl; - for (int i = 0; i < rows; ++i) - { - for (int j = 0; j < cols; ++j) - { - cout << (grid[i][j] ? '*' : ' '); - } - cout << endl; - } -} - -int countNeighbors(int grid[rows][cols], int x, int y) -{ - int count = 0; - for (int i = -1; i <= 1; ++i) - { - for (int j = -1; j <= 1; ++j) - { - if (i == 0 && j == 0) - { - continue; - } - - int ni = x + i; - int nj = y + j; - if (ni >= 0 && ni < rows && nj >= 0 && nj < cols) - { - count += grid[ni][nj]; - } - } - } - return count; -} - -void updateGrid(int grid[rows][cols]) -{ - int newGrid[rows][cols] = { 0 }; - for (int i = 0; i < rows; ++i) - { - for (int j = 0; j < cols; ++j) - { - int neighbors = countNeighbors(grid, i, j); - if (grid[i][j] == 1) - { - newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1; - } - else - { - newGrid[i][j] = (neighbors == 3) ? 1 : 0; - } - } - } - // Copy newGrid back to grid - for (int i = 0; i < rows; ++i) - { - for (int j = 0; j < cols; ++j) - { - grid[i][j] = newGrid[i][j]; - } - } -} - -int main() -{ - int grid[rows][cols] = { 0 }; - - // Initial configuration (a simple glider) - grid[1][2] = 1; - grid[2][3] = 1; - grid[3][1] = 1; - grid[3][2] = 1; - grid[3][3] = 1; - - while (true) - { - if (_kbhit()) // Check if a key has been pressed - { - _getch(); // Consume the key - break; // Exit the loop - } - printGrid(grid); - updateGrid(grid); - std::this_thread::sleep_for(std::chrono::milliseconds(100)); - cout << "\033[H\033[J"; // Clear the screen - step++; - } - - return 0; -} -``` - - -## Next steps - -> [!div class="nextstepaction"] -> [Build and run a C++ project](vscpp-step-2-build.md) - -## Troubleshooting guide - -Come here for solutions to common issues when you create your first C++ project. - -### Create your app project: issues - -The **New Project** dialog should show a **Console App** template that has **C++**, **Windows**, and **Console** tags. If you don't see it, there are two possible causes. It might be filtered out of the list, or it might not be installed. First, check the filter dropdowns at the top of the list of templates. Set them to **C++**, **Windows**, and **Console**. The C++ **Console App** template should appear; otherwise, the **Desktop development with C++** workload isn't installed. - -To install **Desktop development with C++**, you can run the installer right from the **New Project** dialog. Choose the **Install more tools and features** link at the bottom of the template list to start the installer. If the **User Account Control** dialog requests permissions, choose **Yes**. In the installer, make sure the **Desktop development with C++** workload is checked. Then choose **Modify** to update your Visual Studio installation. - -If another project with the same name already exists, choose another name for your project. Or, delete the existing project and try again. To delete an existing project, delete the solution folder (the folder that contains the `helloworld.sln` file) in File Explorer. - -[Go back](#create-your-app-project). - diff --git a/docs/build/image.png b/docs/build/image.png new file mode 100644 index 0000000000000000000000000000000000000000..f892839fa3f9ea0082189b31a12fa82c2e223b3b GIT binary patch literal 27687 zcmbrm1yq$=*EYQA5|nP~?k=TEN|5e`O_zjpcd8&IB@)uz(%sz+q983@-@UC!2!;~`g33pP2d-#i zJGBGsW5(O0x5&Z!EfHfD97Xg9FVooGKp-^WMznUQZo51a5Xh?W zg}8`{o8IoCPb}fdN1E#z-vy@F!9Dz!kDnoEdbEgrx9u_BS2g19U5#gb*^>XvwPO*t z)$yh3nt(EQm|5>*^-M}jD%z7$SeN&#-Um~ZRaKN~SuU@fiC{DzW3*HArA}0w!nva0 zt(Wl}7%ULz%r+s^n#1gE#n`?mD)Fu|%T5{{xKjPxHlD6l@EJeFd-&}5#$}_5qohGy zM=)}TapNr??0pwP40*yzUoCZS_UpI+8Z?bE5b%~H|A=k6G z$QH6d3Q)7w=+U*rz68Uh%+7fQYg1L3(-F{k$g#{&Z*WIC*1~xr+Kp=rE+>g=cSc}s zpY&(eo?i~R+Jmno+`L`0i(l~{pb5H>`Y(*4lvNbpPp3e$R(L#8S(w{OM4s}=yAGq! zOM=q3&`~y^FGw2P8KIq2W#_`mkk9cFx0XECMbu=xG~6Oo*AHEO-r^?(nOl`ntGc&Z zCZbeS)gy+F+Y`^*;TPZnlj04rY9iCS0#F`t@Ln(rdV$WjVFueCfy5805SUw>$G3u9 zI3drbHHd=)PK8Fs$iO6Zs@u;xO`@mszAU>7(d{J@E(H@!-FnYRcspjVPZPN8Hq2n2de|bz zsGj8uaf9Bcxg54h!wQrXFY9e>qm(*zbY|x2mOZS)gguv%8;kb06XSoqSTisfgXfc41n<0#{E7KULVzaJr% z!w9}(sS!KX`XffKbIAQa&QrJ>ww zTp&gX@t9qDhN!XQhUDn#@VxSgxj*GvP4$SJIF5WMuQ-FhEt-7Xu2c+OE0N3b&{tRE zK&g_^4En}`li^a=rzs_1AMq8*{J7?v$$TAeDu9ABUUihd2pm5-K%mZUCH0lhf9KoK zI^nnx)yl>jqT~pJt-(i}5G%9lY_ltTL40!Am29<`>D4TDy#Z%qSNP`M5_s;-Zd7Zu z6A^XvXzrp#;+%eHJ>Y66g6ch5V}#ub^mVM^{qoBjW@JKPv`(YxhJGC1Iy|X2O&wk* zL?G|sBCaEYoc+m2zhL+QxE|srMEwS>1s5_Gcpk_yjwZJVi$NwL4ij;|lcAyTIR9qt zFq_ZTw7o;ltS^Xdc~`%=v*{=PuH=QW7r?(4ItmlrHi-G}XjAqVlmzujKk zPNQYscO;$awnS~}w%3e|WzxW@B@RO21j3C8MlW@Y&dFU18uF}gky?goo1(8YEW=MD zUPgp<2N=TY(F5XHAe88+G3RHK`~6Lei^YP=hb@Vqg{o*XlH8C_kSGO0*lL)+cM2P}=X?qA~CRMl*VfT0@-WV3syM zxV*BL;X%=I&!HC;S{-$3i-WMn6mePmvbzM4Qr*$7)!zZb3#>xRW8TLtGHNLM=ypey z4x_jF@lPW1?Ze@!6${COQEQpqFXwMQQy4Ouulzzs73jbi^-p4z$Iowsf&*o=uyVF= z8n8A2`^FR&1V@nT>kpSVU2r?Cux^J$EOXWhcvGOw|#)#Q(ShNK~cgk`snVTkpWN72JU3H0k(v&{zS_8Xm)%vHk9v?rN*vV`Y&73p(mJ!Rq z9ZWkTU(_ujjVvAphIYdXzjltvfGI`v^4V~h$+xn}xFO;;A zm4h#^UFuP)U@dAQC!63_yrk>yNm`1J@%(P%nDp*?N_kDKXZ7|JVhzZ)mmEgg1CbG&4 zCs?U}&C%0dEl{DKoK$2tJpG}5oMQp4_4Q59cl+DSlih186y(sDoc&x8Q`3q&=##p1 z3V!mbb~=1y@-Ik($XE69k)HVJKDHR=G8Ndv*Jqlj$-v&Jj5=pHAj4_2jwXfI2f<*3 zw)(*!waWoM6WKNbO1ZOdvNV7O#ngI^HZrSYqh$dP4pZupT*vk)Sgb7vPOnGJLd(E5 z&h;>98uVTUOym=%)Jq?p1*%3Rq?XeTFiT-IY_Gma7W%Oy17%UADKKO7rsQ*#OeXP= zP~>geoskq+Fzls}de@CmElww)Q23gtq?C-s_Z;~CsvE`T7MF^;=9U_}1-J$MuA5;m z+%=&xV9padAN;xqKgLb$2t<#$a%|jqT2b#(A>m|iM21_Af>XN^Z`$)2 zL#7%POb3=R-S{NPsiKad-9fLlJLAHG{^<(k^!6iU3Z4|{f%S(}yt$pC2;L1zX0Vb9 z)`Z-Zds6f-n_9)bpYcmVq1hG*x_Y_Rp+o8>Z6LQQ0Z8YclAASr=XUAM zkue&44+R2Mhmsf1%kx{1EnX1%Mm1@pTF>yWvJhk#tgUbxI5yV|Z#+ReV`mi+TN)HY zDfG>mr_-3Md%|uqD?ax=lg`_hRX#C3?AxFkVuf;PJ%Km4B$KMJn5l650zpl9e6S^` z=GD#Z>DBdzl!P;>kL2j$XqpJ9?b3;`mzmE4gxQ=!6I)~R7c+gho z-?4;mes!Q03NKmU4J5%43VUfTNSAQ4pAydLU*rw3y4HjWL8E?rNTgQsaR`K<#Qz5E zfZN5zIZOYH+|FfvNkKa72nCl_fnah!jg=fEHRdoKQv^BynoX^xAzQ(y^HD&;{dP$# z1t$=4iBiGPNpkSOJB(Iw0DI-!L!*w;Q2{Fqat&GuE3PPq5OP0x))ERamTXRF;UW0f$8&7IHt=ylzo=0_?IpScVTLFyTQuL;hG%B5)wU zJf!nBi4lVQRZ;H~B60DXC+s7jSB!pgI-+bT;_OK>vqEk01r*#2KYj$*?T%vfr*xj3MDD`kSA4TP_u^?I6t7HtTYt-2gq03{3VG% zin_Rs?wh5PNh-M`fKYSFkMQRQALiNI21l^PNF*KW&twvhQ_+$>sbP?023*OjO{3tt zU)%|rRp=jD;WT7 zZltBWv?dj_YI6hE)s`WiuRR;6Gz68Bg<<)sT&q6X`#|Pe&S;B1U!d&ATe3b9_gjILaWeTD#Qey37L@-glDxA0@M?Pm>cpuUD zNO-7SzRvy(Pq9N6H}edajjNA)Ucj7bK|t>*_ahF}1(P>h$&QA0JDW5M`Zw3NC*jXO zQAA-K!ThQVE?W>+~F z`rsqqK9aX^7@f*r;)yqS{}?}8Ji_Z%MqM<2Veg9l`@T=oaI>|r5011&6YAP3)A5zQ zOaIL+Hl7x;W3NF28Tu$YB0gB9BMYNY=kwrzD6_dpc-Kl)cV4LZ+HJZ8SA`8G)hu}S z)p-8W^OAURmZXsa8=4a*thuUe70c}ks*Kd&xedJCG=0P5c=sJI90@Q&0ZG)8`6K_5 z<%{DV*~eG7`pX_}OjhyJkALco?F<2X^Mp;l8Jq2VAz3Zm&hD$v+Qr%FvDoI8w{*bN z+Sb>}E0ls;fE93^KhqyWXB*r;K6$lSk=NL5wy%Hg9jxf;ts9dawoI~5b{knac6xK= zzm+REfBtRmqfcVGKBy%Y-X;%r-1Zd(dDgA_?!b;MxchPa*`jN@$FkR19YRcm#PVUl zp4S=iYwh^yw}Z>GKW%S^%p8uh-uIh2jAQgQBtxlJbnaq*+}_l%I`*?svu^NBG zpzYChR^8^7a?-o^ePRKT?}hZ~JguV7_^XWRM@;ZPJFeT+&5y^H3`7vT%E$PPUBlp0EL9q^*OojUL0 zhrj@k7)Ttcu1cmD$ro(ta4AhwxISSf($?EZkOenZz9Xvv+iX8aP5v3e4Dv;-Q1O2@ zvGJvrSQ7=77WJZ!{K@y@t%jfJ%WKQ&<%7Y_n6br`rp}9FRZnb~X9D`Tt>0U2B}9{! z3oUMN*nO4~(zl^g)beU>PxEO=*9Vex7r@Cn;h<4US8+jsUWgvZYHeOGzqTs6rCG`s zES39ywWE%((`_kRJw8Zf*%L9S_hpDgG45&KnSD^@=L^prrp>MClrweR9}K2sL7WrJ zVoK_L+&_y&_3bxGj`E`1g2rmnSzZ%~?DSqBpwboWf8ZAvXV9q?ra%?*4=~Dfam6oC z41_`Q3mOJvbC{0_r+iKnnEa4JP8VT4pa1=2tk64Ru)_T~?0Y%9yqo;^#MRW?bdOyx zlHLJV9cjsJaFeyL=ET zF9cT14)RzWxZx5PeYoCLvCFM)i_=5C&f$KoEpHG+IsS_oZ#=Fm{>#R*BgfLJZ14Eo zsp09^`WKQvG$(!1pe}M&;M8-sT&G4}shr(%Z79D1`(Y>iazs`e-WwnPam|(8;Zz{d z+~-&ozpsrXsg9fdQBZ%G{HxE+&GobJED`41INR^4$QQSBV2#znRDac*NP(t1d;gM5 z3KB%@kI^M9Gsa}9#a>^RhDBzYn?HJgtgX5 zu&WO}R_1!HCAFzMF+V~8ej5rz)U=hSp;dZu@upC}S#M!M{WKD~%DVD;&?1)~wX__{ zv>D0fWhq>DVA_=7vdKv;7q~RZ%%|;@&n)X{0j-U84j);;x2^swBKbG5LrJ0F6GT2y zF{=+@zbZaYy_*u4vdG{{QQ0q9%a(4mM;WW6N?b0VD}0;I;vp$TK(~Q!78;rWCk4I) zS4EDD%$X%e@n}6_K9&`s{#6N8XWL;&rTq;(S@rPPRP<%ah$u^tg1C57m+-jM@3?)_ znZN-F()Z;0-!a)=B6+5t0Ubiy@pTo$Pq8fia+MDz?wz2UvICA zd(lNRRr$<2w*}+q+-q|02Ez3e=>Y~GAj*wElPpaAP6T)Z*{BnoTT)j6#oi?QJ-uY@ zwMMr6SXqiP3r0(5ED%*})UOd&Lx<<_;6x@~b?y4mkDV(Bm!>rOO>t3e+GEsMX50h)=-eqxGN7_Gpp$9?jkv>1#;jOmJ1i-< zPXM3_deQW>=rp7Czpx1{t~CZm?LdA*!e)O7WIJOW=c(!hi&fJewmBD1+Em6`^i-nl zRt}2E96n%o1X@6s=VV?q{77IGqB#I3e!1siQGw<8PlA!@TaVkZ1!G=l)uU&eyub7P z5BnIl5vZ#jbPiY&t>U(Xl28UFh@WWJJLn8Qn0+&2)dMm`a}UhNm;EU(jYR`SD{hMc z#&hjc4a%eQ5@W*W$VQM8#vs-sY@Dh1I-?6S^aW^wm)!wdfsLl{HM~Y0V|X+G{)b#D zRYh8D*bKgCSg1H2m}ExE69y^0Pb5kt{A92e>KCT5_|!&vhLhY@`;DBgL_H;iX^_Ps zas-eE0j~&j<`G`=RbhWDBKx@PU>A1a!G_*Gkw0$@QH$BW#w)ogEMBx8B}zS*A6KKF zSIkIZf2CGJv&=Gy2&p%XZeuZzNVmtXWN73qYIgywudt};DhDt~HDYj*YIoPWAhJl} zU*BpfQ&1{My*=hsMoG3A5_Or8M|`R?h2=jzHZ-GCmGpN@hd_TVT>z)&gvmt!5sR~o75{3wjE z7W30$UtunP+&@7v5@*M&&>YiDp2$yLkHj?W!VP(#=c3UgBgxKRA~Dyh>)6epB5ie& zS;d+R+F9j<705bSA?K+85eBsicbpZSVY()Dku6|Uj;A2;BsBkOS8s6$CclVss#?Bq zxm%w(Ct6xuf`Cp#r#cC+0X6*U)RWOK;D5xm~|v#jrf0@)xVx8nS3mOwQwU8cqK zE=;V-(I6-Dw!)B>KlThdXy;pI51ztZsua|f`S{XoIJrdw$&k`B;eQS~B8b>W1 z%m`DxnEuIiIItMz&2(_9fEk2EApo+Nyif@$jXIeWAg8|1VX7_^v!~?zwe8lN3tNEAY*XYErv+v^Ayj+5mAVe_-itFFW&laBA|LU&ZASTKX z%tZ7Zq7p4}QSObwVdfz9BnN*hsbQZ*vT=@o zr0Z^Ngw9I8G3la=ITwZz8+K`QK%ChKT`d#595zFg3|boF`!b79tl=2%V4RGx+{5bcgG zXT2IR$Qz0|oEzSr8^jrGMQVO-lL=U^ZJ)HJEGM5{0$Id7j!C{G_%;dh; z&mQyf->Bmwt$A4jV}hNLaKRbmd&}B6j_U(JaR=u5Y68}-e%5moL?HhEz{t5`C(31y zQ-P?mC%r4JRc$pi-?*JMmR+T%iXx|`+rs-t_+M%ty7kMe0Mn z4gx1F2~yP{Q1p_M3M13Z_4Tu<5`7liz4SVK>*n^Z=l~BkwU1jy|H-mJxyE^EMj)B2bh03O>Pih9^*-#8#ua5=dZ^ID=8$vrG(*@&0 zW*~tF&TC2x4%4Xny7@C2KhmsTv$IeNC_bD{>Q1ZJP?c5NfNunE9od}4$?3OhVD#4uYkVxmal}#wKo8Xt)Xfra#BIzO=6{8wUEX6tg9>FK*5huNo z5|Uc+n4}rmhYC^&V?`Jb%{n4Ru3)_J0eWQ%+yWo#^j~W~e{R5XQ`%%0a8GTWVEXH00XkWZw-Po63$@IbxDVFEKq%p4zYUC_e2W1rlcg@3Fce5?_Y$r?uZ zJ;U^5m=s-(Spf=8R^r*yNZv{UIjS>bPx1C26z~cpvjJsMEjhX#tW69DH!O)Wtp8rT zdCH#i7XCEL(Gw=b6*a8kwaNDFH9i+=_7M!H78xV$6SrTLHqj6Ribo~}r;6hArUrn? z1LSmq;$_LTKc4IZr6uULP}CxL?leY_KvsMp>1y@N6NOX^DJ3kqjcP+IkYq4xI6H8` z#lp-MejPv}UM>zu;{EF1Ml?p`s(RZ%45~IFP=}-QaPZgDWvGmM?;ye(Elq&cL-~+mwyH8T;jqvpQk%>QV*TfhT2#u$@-|j_Me$R(kw4M0@v-tqwsxSyV3yTC zpNlQE5MQWPM1CX&Bj+TncD42&o+*|T?l@dUyLW)!7D@qqcKhuRpN4(oX{9yU0VRRP zHkO_8)L*L`@e3=xeHnl6}jzqK)jE~jy;{+h={`L>1w=ZmDvLuN&wU9he4 zH{4~urdXtN(v{5Dzf8R+QxNIj!EA7iW*A>##`D#hzEo6e4Bi0n5J0I`0l;LmiM&8H zZef2HQk&C-%jrXj@m! zdvtELueogd{cBDr^cU)%f4H-2sfgOFGk)l@hZ`%83TBV|suU>35?=(b|GGM7@Xx2n zN*Ot_HV4@5tVxOuMARb9+&*41+Y|<4oR;rhpOH8wP`Dqp!){=`dc<)*1J)5m4>nZH zGDoleSz->n!PgbxnlXv)RYipj#rbnGMmFkbJ7vhOYX;X)tJ^|La1nJ*$6Esk;#lKI#75D2TD;Tde2lmx^I0&G6Xma% zYoAC%^l5X6HC~@+8y>_t8vv2^pKd9GxjgUC^7*@7QuOsG-2A&gJyXb8Kp6yol?Z(` znpunP@18&p`|ew9Z4nMJzuCawF3R`bMNJ?OWF=5WZUWWVEW;3uZ94q&M>8%Z&>??G z{=QE#Fh)PPssPskfD_N+qBY4-LXVIsb&TicK&eZGqaz5Q2M(Fy@0xW)1;hczR{HtR zDi%x?3|lQZa>o}EpC$B`YoHBt8zz{5=d|kTr(^BFaaLXbJr!g}=t!x2uUR)olw3Fx zEeT^qUq`Y|L7)Ih_j;a2+Q4$}&ISC?_1pJp?FjBABN8-P`PFLEk{x!)SHf9uRdTi< zcO1(W&smBazfQ>8XeGVynL_z&t0vEaG=6^_9E3CuYa%aZrze`2j_LNR_`yM){M|tn zr2k^+v^=(g_<#B; zVYwrkyKV^02Z2=dYYy>F)@pEYHJ!fsMxT{>Ti*q-bK77^Dj7K%*hcz?QNU9hIeS!+ z8IFh6+WZDl!|GS;e;}()UZ{uN zFDc^V7C0w|2uW*yTv397NuO2z2C34*#8Blfhc$1xeI7I5*5;d4Bj(R$ zL2>$GQMy2_yCN2(ay1;9D*IuNz2ycGdejiilsdQRa|*Y106V_nZI=%0{~kT7sx2)9 zNkx`BhDq+Q z{70zWKh6%-VU?xCc``R=ha>^lR3Oy@=zA&@;vGa6xYfHDeMh5YG0pODt?`19dg!w8 z0QM>rj1B0>PXAGhWIM6c)^ycXu8QxNs}4K4I`8iUj5tr40xqJT8*n$H^zA^kQ45>N z9QYo9Rlt)11A_s>{Z$0?FMbT(--gziXZWWrTiG1FNfn{u6yO^FNn%MYbc>K_&(qA; z!W3!#KcTAAt8*{Yc10YFF35D?wR?ouGhzo@!>D6>O(5@3=uRD|svaY<4+CwlV6Hmc z)+M%ufYgw5Ed*V8|Hq91fJ`L--N!wyN`|04E$&R1sC(I2#=Y!pQrLLYv2=o0>`@iz zpW>TWFMDH6TdHl!MksCsy=#7RSdGTifcq>G0l2hq4Hf_Rg32V#o_kT63dlF00xd&t z-%FxE{(tYYw9>a@n_H9-qS z(C#DRjfO>nGnpSM%M{`KFBu_N=f8WdC#?U)b6tQX?xI;BpsFyh8p2FuVbi|`G#{Fj zPH0(Sj{s6hjhXewG9YL}3x^|pnri%RuodI6I80a9J2(TWN=G=B{}r|p0kG8{eyj7x z^5MN2Wr>+}r8(Nhz#*Lz5}W!k*he&Iv54~yVT~|AT+slaQyzHpi4{OK(xF|(dDlaF z;hh<6Z4T7QP`NABc&w_0ob-Hd<%(T7QEjv`a%cllN~{hYE#if?G2E2a1n4zP@1fgA zK;u8hE%loO1s@JJ4uwvJ!%&+aEFJH%{@X9Bo$E|QiZ9*JP>cUYYPm~75`Io2sln$nU9%$fK9!F_!fUJ6>Q(7XbYDI>U{mpm}75`IcG zsYx{poCa+sS&;8mr97HTnqFjJCc&vuer)~51O>G6{kc@VSL4M1hU|qO<&@8irMaqXs~s>Btesg@$v!Dy_BVfQ-#<&A0POb<`2!BE>8H|9>eZ z5@B2DNK=^F^5>U7b#a73bnkuz59Rq2^#|Y6_6k$FqcMe!{|}{WPL29&X9aB~6&!hPmuau16*iQ}O_03iR=HDwKXT42R*|Kz=K;1B>%522PaEqIcYg>Z@mo#Wxp~#=+$p=;$c%7*IPoWH#;EzHX zM9u*a+lkr_Lrln$?TZCa^GvCr4|l*6q`q;c(P~g1)at%^z{4l%xPHO)zcmaK`m4Y3 za;O^VU-}Xt8~I^wIqW*izcP>xOoj@sORx?O2mBdaXc-r+s%Z`|~m z)Y$)stJJt|T$&}+zUAsA%*f1Oe)Q@5)U~8DH~orP7dy2ZABcj$Alet zON;v%6@zG0KIT>Re=Wy1w)25C7W!_d=tS+B8OpLcF5ebu144%@?QFw{bCD;nKXkZe zy{Of=KNH*!rIpn=`v^`(sAy$W&fOjH4+cAhIEbH|u!90kZA5@{H9687K2ySF>Zkm-)%0sT{RHsah>*z%up}xPWr&1wA zMXZEE27^l4iP6(Rg;nta(0`DoiIB63?EocUKSYeV`5$kXoKZdbszEi$+j_A9QZx+A^%^$ztDM>te1v%zOj zkME|tenT;?$`?6OqjP5z;d&f5el}-esomN)aEd9x$&ZDj^iZ}Y3N;`cSQgGdYBhiu zoGo*kGjU4S^~K3B&E7R!*M2I(N>HkS&G=)>2x#lei8g;(r{lz%UaFboLSiT7Bl<#* zRn$~Opi+58o~pc7y|-y23%#rB zB+dR#Yu-0GP+BYfjVK!dgj!`yafy`#U_NEPSWO663gt({1*cZnlZqgp?nu8X^2!Ak zdm4ecs~&f$t8PrYWmnzsSN)rTTUb2-t#ucsd{`;} zjEHsQ9;tVR6K&F{Rugo%m4iiMH{17_b}0+QG~dF{$`AoP)g@0yhidK4_bUhdZ*0zovb+wun>&EV zx$c$4Yrb2nzl_5TY+u8$zPTElp?Cd4VXr(STz7d%Hh2T~)oUvtmfh5opC0FVj$X5t zX5W#dk~NH?tZ&NWJz@hGnT#mLbcEM1rSwj=*YP7`t%4kNU(r;C4juA@&iS(1EFn^6 zKwAp&VO9LlgWHBwAqVZs`fXc}i#t3<8$;KKNdf>#r{MBNSNg-PwFw+qs=|ZUkCdK; z+R>2U%JvT>Ed-H&4SdNl05J^bAirQh8ba!R(4ZLM3q@Z@CP=ZBV>%q z@-l$$oOy_E6Z%A%|KbDh_xnHEKDOJ|&sU?w&ijCWryCJQagbZUy?<8*I)Bsz$W9!I z?z>k}6qxD-9wib5Ht`$`e1Rlu4YfkYFCb!CU=EBxrRtwzF5eIOjjYD`@$S${G$GcR zZ*9Q`O^91q8D00eNGNy{@pmnz=H?xw7SkxaP87147pfX!McH9QpK3(Ln)N$wX#WAK z``ZX#Kgd?u@`RaYU|(QR^776rLd+GQYNP(iG%Df8DV2mEqXbz-Bn5~T&)_+NeFxk4 zoSCvw*IXbU%G$()G;%P$w;-fR*#Bc%y~39!AY8ut~8 zV)_+d7RB#&jtihLb1&gu(4QR8Zylifc8$Xcdi4m&r`1=E+7FM2H}*-Qix|w0cjv#H zOc(9~tdtrLKhX|_Isg9NKdPsXXx>h^z;^N5UKD{V=_5Tcw!1#8q~f65FK$20pNLYs zVt^h?JGuoTzDx)|Cun~B(6)CnO>SG5Po5U0E@ja8M49d|Ct1UpXUY@3Q$P^jTpd3> zI-Kj_D*@4OrtP071UP-&t3gr=e&E)n zwm7Edmh(=Q)j*9ev^VfRPKPY4dqTJ0ZfiQ8^YezmAe^mkggkB8b2ci9zwgDf+cfX= zA1)9&O|5OpQf_LS-Z5hjLg|5HQcuqVC#YBRc4Ez4iFxPu)Da zAEDXKiEF3f3MXcL@b6#4qTgi>%y_p3mkB{PQT|-!SUR*SsZm^VnESe)uwRz$esYWR zWqG+-A>ry|`l*Mch)J{G=4BW~R_lYrv7&V1f!~MCQb3y(Wh(!zos}V$Fi8n~nsw_2 z1hJpkq;(Hq0ElaMhYTM=1*)8n)UWJ84Tmiu+r_5{ZL`-do)*?b=AEL#KUx~j;h9?= zyGnInY%Jog6;N!UFT3h7LV=2JM_^`}YzeNs>(8Z)=cqSQUX674mnb)hypS^SAqfB0 zCjTbp*}zn*0qHF30H^&sRj-&+Zixi|5P{{9frzkPN`zgOxM3Ij(0<|;*V*PEE6Vva zpe95;L{*sd_z6=R)r|Wu3Oo-05MjuId}|=S+~C*go~Ybp9n8!bgTYz1tFdWUlF|aZ zH^Jkl$t|cxbdm4&*TxZiO9bu7Ov>Ovp(|F8b$oYnhEaCG*y_fR4{U70L|An*5VFd! zbAImZbjx*zA?%7ox}Zk6XdzUt#$SaQ4bNzqS#Oiy)J}Cp`s~P)jsj$abLc>YIBM7U zEi4k+5I?AJy_D3j_O0tmhGHp**Pb9vdg3F`o{*Xih1I-cH6o3ETGvATZY|&I0!@ba zsnT8EYnh7OrB7v@j2b0AdqA`1_Hjo-h0Lz@1!hYD(3I%hd};hgyXO4ossfglA#~i3 zG?&hB^TolLueNC8EIjhhGH0s8-deZdVKAgAoWKJDygZZ}8CiAMxJu|xI{I9LS`6yr zF1VSC1wRCZSDXp-KVf@F<`dWG_Ro?}G&M^!Ngkg~Zyz5orJTD{|0>r0R)2oW)tIKC zFO8yka6*{AynW+ZtgbcJIGjCsWmPnLyfZxfpz@3#FNjF@+Bvp*wg2l@U{Zic->Z7Z z4hVqHw+W|To&G)XrBEzyjr;0BXms{+^OG#NHo`9Hkj*9I}Z!)MlS>M z&4b#S;nwvNDJ@xUAM=Wa3xSl*!H8GPA3Eh_Ej9J;x>@RdE<9N3D^TaXmo~_LPPeY+ zayO)3ZuYNzd!pxf$9*WZ7a-)Gf4Rj%eLGfkQ*>10wH>q2d||hgFzxfY;;QrIu7l5F z*6og6SogtA&2zu4Nsk*T9v+|Q;p-!zhG`*pK-1OY{mXSvLf>0`LFeR%MQGF3d%Luj zFT1e--=0f*L2opFDX^%Hm6M0XwxoPv0#*k$I%T-MQ@pS0`uWkD+MelX(y69tu(RIM z;ih@voE2R9e3aRKr_XMeRKuChu)Acjz*+FwwA$9$^zE_L(etXRVB^ZEi>v7$H=4se zx{YahhbMsMw0^kx=4xN1gh<~-S)sz6=Hu}26~Db4&1T=)PSvyKp>+LR_uTb}6NPRH za!cw3L{yayOrUsoLUXg_t1)56QUGB`DsU#m;T=?IF;3cdr!Sq%iaV)w`~gk$V7kR( z^3=eK0j8WNWRN{{NVje4FI7x8d(TJhq9?&Dsa?7}?mkbay6s`i4&4o4sWh5bU%E^n zKVQw77|iH`Od&v3~Q%);C`lu)nE}NjLMhW7!Xhl^x4O9H_x8Spv+mW;&a`f0v|@Fy%Mb}U z%eAgBTnwD!j*j^ zC0T`uY5}Tj+b4=jNiSjY%KEZEAOJ9Dthq-|j1aIEl5_>=&-iVTU~CO>9`+%nc2Ymm zr^8VTEudh+K|3fS{NcR{dnc-9<-DSBqGp0hAj7)bsgngSB}gALXEy-V;xb2~|Fze@ z0BGT{{U*c+hk1E>IXS9RbTu-0d*gh59n1+9qmINUthRw(EHs!_s)anpP5pfb;gjtz zfL^vIwm^u4c*&>RJ%%e)A2_6tXZX7G<2>R#2o^ogPQCCjiosQyU-ucNFmaCuE-cyfWHWJ78&enr$K7T1WctW0C zX822+IQWyHk(;s@L1iY!7)Q~mT1GE$eOsP+1I}^jPTsj9;x@i5@ass#h1q_|`WAv6 zT#XHZ%xBIqsz8kvLpJ`V=FS-SM2;VGZP*`|d~)4MCO+!Z=mN$!{4&p#|LgLt+D(x7 zi>)k>cqM5jjQl}P5+9_AX{Rlm;B5c-J2{}=H;cA2ZdIH>tFjN3%g66fU<+!%czaFX z;CjuNcdY$xU)O8UB{EgOx7l5@@U^){I$(QgEx*#IOH59$#r&{`Sp5*1pHy=(m0r$@ zDT8tjG~THW*sqJ9IHwdjQZEy=Iy-G0M!D3)@x6H(@{N4vjZ=iM)1HM~I$`UnRXuU~ z;pKO2{T`PuHCt7UJDDnC6aVT(Xi)q|Xs6QMR-P)nX@C7qHwKl1BZwl#Bp z=*H$!=oY`8RA4%Ivt=v%m2QD%TyFhp=lTNbR$6N|kPqufRG@Nbzr+x(7!c^bQ%ZH& z_NhMdQ_4`-2h4>>EB&v>f#AsFmGI^j4~6SZ6B#+Q?{8tPPHLN6Q|V?L6Ug_|84XD)(JO(;Gp}f)hXWIGMkGJtiia z^F~jzb6l5Sp+qB^VD*X$6VqLCn@Cg2NQg?n)dV`~34q2E{wIlz3V>{FrX;H}DxCqn z$R-ouS=AbLNqEW#5i)Kn7g@Vj{1don{4 zVy2qanRxp{P)`3CqN=IfNfEfeb^G5CqrdWeXCE2Rx&DQ~lUyk#wPS(L;EJme6B!sB zeG(#Aa?pql*N{8nkq+%t;qCMn!Z0TL0JD|^Yt;DpAwgh@i}mXgF<|VXcoDm@QV0VA z+K+g7xqtI|0A>BR6e;x549#gvlC@l60T3|*{kg!8bHHF9ieu55-AF(=3Nwbwzz`_i zsi<*#5b!KJAvWNHAz1+}DZoaOcE-i?U%tQ-^J zclx8%--bZo=e%&FJsO(OQlC=hwMg{sp+$|>;7`W|v`60O6qTNT$dQJum^{e3?nI*~ zlyS`(uO_ev)sSMJ$Wton?!Jkd{Wk@stl5R$-TnDI%lzcFLQr;31zV|p7ZzJI&iFy~ zKrLEUW&pYPXIC!CDX4Llml1G~gh{I%4-7W2zB`ARxjhnu(B3Y$+u0hBye5k)6!^u3 z(B{D7=TZ*e#ndAt?mrN~8l8)9~FGkzz)VoN}~@3B93p$9n!a~=0u@PPez4wldq z_&!y29h&a#tcbwWN|HJ_{lAZ zneKwVtJvjO3%`(ha!Aq_$+TA{35evSGCp+dHmwn-rvpD8!ITRen&8YlRxT8Xcz`L} znmAnPB0ce5`n@xKJThSLF?8$N&QPF7d#bl+>HfoG78V; z^CQ*<6mgg#0L;$X`QEKz0DY-|CU}N=;4OT+;x#HDf)S(pc*;V6g;yQnd4en+kOM_E zzHw&|rsn_O6N=|*+y?JWz%rZ57$X17A|MNkS_$+}sECSn`!k9Kqo#xfO+72w-I-4> z@bSFs^~u|FSo84HGNAkxMdP|YpWc8i;_{;Eelzv*iATjT;m#2{1b?|8F z3LoMyoTB?&Ckh4nPit49vH!^tWQsnkXfDwD+N99-!bg&ot^H83Qv~D)0&t`yOkc*L z)s~0UEPB~9)pw919T%Ytl3TYBv}=Tdr_14HE^Q_5$5GbewVKa|_34oq&eRUp^nQL< zA&IQEaxzc6O!$Jsa0*To^P3{_h0S#{@MAMUn9L)>Vvzpw$@E_(Fp^(7JL7oLyTnT+ zqQF&`_rgHtm{t{3O#Pj-8AteEH*pJ(xFoJ z+lx{1+ z3tac}*7P`q?&*x)rAE4#Wl`GW4~F96Sb9KlSeVVAA^yc3_oMS>eC*p2<8AseDttPI z;ioQIFoMBW+*g?}po7P57c+LHdq-y;`e_#kjeg53AC@0gMtB_~@Zvrb*S_<0GEWYA zFS4$iXF0D0m!)vxVm(vD{Iy?x&Xi2dmM?2ude*GH9!XkVs~U&XeN=QdIO^5z%nwBJ ztNAGJGmRL%=3j-;uQeaZu11$Ya*>M&-gBr*0uVqph$51JVRI}li@;n!eUQgAn~{(x zHIr*|hUcbbttwr0Zt&TDcgQ|UWkeX0DOsaK4mU~eesOdqo|i5Fs#X64)t0;3tM3&p zv3<4jDqZU6Q0THVlbdwJ^jAfuEv6@-W zR3p8vXd?z3vnWhdzEnmE!BLgzAkcaY$yW$94)T=1u$YR+n7*{y~cC!;cG%)fPJK3M#L`?%59{y`D#zR5+R9 z%(i{2Oq-~Rv0R!C!CvnOSjWh!g3wAd-K3`3S=3E6i-S@Vr3TXwQ$ z-v?PL%cu-x8H7j}Wf_c_`CX&F-{<%IpYQYhp7VE(bDYE6_qgV|uj_q(KJWMIc1Loc z{okPvRFxUjbd0Sv?pkc_T|_-CtvOPdQ7v0=iCa`a`D3rwbAwa%a90oIfMBw)OssYd zdG6`aAFLdcaw*sD6kK1f?xX;lLq4!$kKTn2jV5E)<&Db(vm}q45vZVctK@tXh8-_J zt=a94RFt@%EwhMPP1=}S$lu*~_U>4s8P>G}nK5Xstmj%-GvKBerr0~qkTVk=b=(acJsU(d)IJA1{D`DXu0cYjE5Gt`?FL?nJA(rH_f{jT2kxon`k8+hQx&1 zZ;BP$poTV`s^C$zK#h9qC6ZsheyQ?gXef=AO^2Q%i0-l(El%wD_kXLY&>aqZf}bqE zJ!Y8%n*nz;WlM8ZgOB^uZfHY2Ikv6q|c{wI}jcMsMNFkFp@Ev4by zkZ1FoRat#Ridkzb0%FwN-8WOkUG?V*W6;kG$&T2~-Pw*!?@8j`bg0%pHpZ8e$X0X+ z?=PowX{D!jF)2lON5agKn;+Cay-((T6G|M}LVxHWun?S=V3`ciql2OMIEc%cy{PVk zr+bhS^IHf4`!1Te6FQeiCrL@RifgT!+fv0-6MuFWPKJR0dQKHTPJEDtY>%I5UB+%$ z&l6dF@!Yc)HwD{_Ub-aB1w+;%eYTW8(U@R~>mrD_HT18xq(}(Xe(WG@OF|~OStPYC5A?F~3Ud;UBOm=sY%8zle5S%+& zDbkUU)VX zdeV}i)Z2lu*-DH@;D(SM^QnA&g_!31z3zy`iAmA{(JgDe#+pG}cs}}i5`@XA5a>4{ z>gQ;S_3^_XN@`Rb`Cn9`KZW`sDB%`H0{h+cU|R|~+fNMURaM=yIM`Y9?KuZ#+xzER zG3?e4LN^K6xlqL1xheen(1bY2Wg_|I<8r}Z00Kc~ob2BCOk3DCCKzJW=+?=1fYzK< zw;|~;-f=2IKM{MP&k@!uTZ`!3Qs!F?EP)Sj8nP4i(;PPtusztp;@bEuM9Sf?w@(|Z z5r)O10ZOVLI{PtHe2%De0Qn-R+^=?dG>VUi^$*(V6YC*)*)>k>4vvX!ONL3>mHjC2rz9WbckRaPs1~kz^UN>k8bxrhvsi#0i@Ue z69|y>PBbW%LkURYSvT`1zc~^C3p0et&^W2ky#c>%lxeRKGE2$dXsYh?pY4S=siv?; zMx}M9y1w!efAIC{=B8c~PPr!R;T2hplMwkOyYqOP_r7Kb44fmZV+bcIzwgL@YTF!E z{8Cgo6^xyBeSNLeqe0 zjGJZ*_k+-|FoTb@Kf{s8Aqoepl4|%FQ5}hm3zO6-*H8v80QCf@;!f zn}!n6&siF%-h_o@Fc1~vCCK33_r>gD=HyHSu6)veDllU@qva5Sq*j?%mO||579iM< zt0zpXxrbmlmmL*4_Y*^T8{4VyrPuhKyXD}qmkKy1LDg5_b(m4s(R>qaYXi~TQv)T$ z;#*n+p=J2@9QogzAdK&?LE~chLdf&6DzSmuz2;Z)^Uaoxxre^YEl;P@d#mJh=BFmV zpz>RN)nDz4K}Q?daZnTXtBBx}M6_dqG0aeu{|pXo>N<_X&k%!O=~$8eSHZ%%3AnoA z%L;=l#qe&8iy(v{p(P@Tp#1sWKAmvvq5ojG&v)uKsK@i2N72HIOZGsx#--#w9v z^2lI#NM^Gc-KoO6H#V_ZX8~0U!AsO}jylyMd{s)3F6HexL$p6L%Ji)Ym_BH^^2Vo< ze{e2CHup7@dC&zc;_TieNVsWeMB47qD9I?s>Idc71vt6-u+?((E(@M8l)-IG`}u7d zvM3fm(^R}SOLnrqlukYxK0A&e$e%cQo_`$;)lNLwHCADfeB~4uucGg|hC)WKh{{}H zgGja?`6CT=(#P8HOg_W7_5)bhB$D?5jLA}5jQaS{1K#&=XKM2kOqK$dS`TznU@?4b zr<@wCXbYJ<6I00EDLlEA8No_4XM)jY0~ z7Kf8cv1BLoysx~;Quy%Jp5Hzcromz{fM9_#Fs6~6Ari12-wNCJiMozpw#vC7@H;K8#4UZ|sN9?T zTyO6z<;6)dLA`Y|Wrc=IIVr&=A!bnMULQRal3jaIXlxyAJ8=tA>b5w6~UHf*wpOF`& zHl z7KI_QsZ`7jZqu||XWy8#Eh%FF&{p%fENdj2Gg#Pea!rP1-+bH%=xkL(6nE4=D^czZ zW=JQc9#L&`$`DTP*XvT+ad53$7|f^^5XdR75B%&nF=+KIWh}HOt$>V8134#8 zns4`G%;qrTt236GhGe>tr>XND=%^SNE2#7HIeNvj{qnXsbRt`B44Xg5e(DS_ZQyzi zO)7?eUT)1Pi7pP2w7p3qf1SsH!3p}^@o{O>Y($jxyGB~@E?Jz}2xl1#`94W+$vwVy z$@ut!v6?x%8yV;Q-a-SIDn0(J+TnifLW2`u+-c=>qf5uX4w|r;T)DH62A8B#8R%SE<miB`+qs-{oj^vk0%AKb2iQF8GFb|MC`RY+E@|< zJ~evNg42!Gi>$kOM!qwgvJk&1a)4Ahsk!w?|Akpw)xyA-!ybeF&&OH5!aQuUy+0!Jpb6tygZ$0zU2*dk7-mA<@aasjS zlPo{)zexXg*&vck`+szrl^+Jt#!%UG=;k3=ISknw+;%D2_K59bfcONyx>}d4EM@P% z`mHCcFW-vcJD73o{iQa+)${}7#=!)|o+Q0?z4_a@2)TOxPbR} z>Nc!3?95XjWs8zHoC4gNt#e2xyvg=o7T^D7KuE&%{{xqGII`s+_6e9601y$nP`>Xh zU{NMt%1mF>c<=Url=L>U2hQjRjOe}|dR@HS5>zznP8gHA(~{MWEE*q@_xnRA8k+1Z z6yov8m9R!=+c@g_mmPE|G3e<&9vof*K`O`#WJDGIiYlC9@b-Membt=fRBklD|2x<& zU>>M5`5?%c_PN=H_e-eo(p=Hhgk91R%_&F5RZjaO0;LYGkk-fTGuDDno15mG0h8w? ziOA3ozaVNW^LB<`fX#T0h0ZDa)~PE@vzZlCyn^Nwzj;=S(2FRXR`{#_sEl{M>;+() zoq9>RFF6h7s}Yn(b!FqcPCga7)ZW1q_K-Sjd|y7~74}%ei*}MXbmju&V4=|2%7szU z!*Q*7-XbIty7E#T|0V67ddaxS@H|K2XuZs{5g|s6ltoVAl4=s-Dop0oO{J_AD=}_^ z4~!avYWX*=YMKQ|xDv}Rr-D!=`i$w2RN#d>k)nWH`~0tcI767ECJVRs~pvMQg< z-i3xxuYFH_dVx8h9zDZ$5nN(!z-}+1iK&}Q$lGyha)~QpC*FrC zdMwGb{YXu+SzSw-ty~a3?@`QfG2|yx9|pnU+m2_9$K!9PeJymJJ@2t3B^`BFW~Tvr zz%$++(NCWHH363d-!X={g4f#guWhC~GX=CsdmY!l$GRR6DBJMPHn{oO6;+FfqB<@L zP}O}6Ig8R3?mW&}jV<6$yH6CHeBk!{v3re;`=(a-ME&g>&SSdgq*EepxZbV3993D3 zgzB;uy22!+(jF_^&Fz&F8Zo?EIshrm-4P!J$hER75LBZ3^zF-4(NFcflkTj9-7FoD z)|DY43?y>yg;R@u0U*9|ode{NS7&mw*c++)wyb(R3VN?QlwfcD*-}}7 z%w^xib%slI(9&0;PqfNdo5awaXwS0vkopIW*O@4jvKOdQbmIA#(;Rxy#~0lHfDdy> z>+lq1Rz*KcRsU$YfX7<#E$e_(aH(s(>qG;~LJf^<&oM)7;EcI-S!Kij?BsDLY4}t1 z(crF4?25uFEED9J4IzgH0S+eARU*x=?vV_N40S=FIJK1t zdvyMXa|%hNsv%TY+$vEaBOK;q z!ce=_qu)Kg=y|LU(#{c!tnbPL&Uwd`o%qBp1782n574zf6@`LA^&-;yqXqUAjTfVm zPi)uFE1E2WTXS=T;|?-w_#n)lU20P7)@Bx`|rRK zr!!wdvKu>}Q>P$n!kbT}QYIdF)Edl7(K6i1Zl?dL!{t=V;#It#mvX-ZDf;Fvmz)Ho zA~Skj>KMaQ!LuRDOk#85yL-PI^uha;Z@J_`VTMt6R_ezPdfTT#3Dce32e>QE3w}3^ zgUqJTopdq;c7VHXk)EF}F5)l~R!eXkIfp4{{Fg{u#}DZ4b^EpU4pra9sLrCvstRsR z|9OI)-)dCZ^Tcw$=O^b|%I>A9vXd^jxmP;&H|nle%lp$L9xT`*)|GvCc7}G7teYuI z#LsO!+4oltBVlx1JEY#`vN8uugtZl;O4N%30(auSR0y)kr9{;ChZ%ifWMn&1 zvWgkPZHTl(Dd{=S&IRenHU*g4wLkfa#KI7D6$(eGz_QKxSuym5f{dzPVk(yX)2QW> zCGzgQjO`}}+=IxD26Yo7$znEANcN z`u;Rkd<7c%fJCFB^SdMY5%8i8(T-P%$+bN^L8*8^d$dg`2{a8|W&q7+7Ko*6La?fR z0jVgI_xx}6C55ZMhy+(`!<~{FtZRABLt~!UhLbkuvGRN2eHTs)fOPH++t>$YI#I^r zFG4c^;t-HDhu}&p>7cL8;!jwWLYSG{$jz@*CpGMBGIKj_HFC$S`;+aSHB};& z7X|f6eGn42+k~C!7nPWatSn40?_uqD{QkG8BdbBT`8Ixl&NPzZljIob6LJ~?58I#| z^B8c~+$637tf~07%)u@Ie*-e0fnO!n2|hdocboQ^YSR-Z)fwNLv-$%9;yP;@ByMuD z#`EfeIO`9cHqAJ|f~g@pn{4)xj`DBAQo^<6RYcHH-a{Q5RP>p5{@s%{T4v-DGi@z( zIN@>I{E&hHK9a&$FBrLKV}#_Cf3qx@9`NQ0n7e^4HN|(WUta2x*zo9^ZBGyrk3cBC zt0S#(K0L|G^$<7q5=1^(F)I+B?)QOBCZtRhqx^q%F_8Y`P+8{Pu>Z@pJ8*~eW6T{7 z(h&?HAbt)q;vlL)5OPGB(tS1`3cXFIH?5*E;K&x!uQ2<|X*)_+6+dsG2%Wu7n77!w z<&kuvJ7?xEA1k@um(H%>^Lx2Rs{^ylEdG_`{$hv5r9YG~ay6R7@K}la*SVPxu9<-I z#w0(yy6v5J1a(nkw_cU6e}i3bzUwl2Uh=lbE~^KUaB;6J_a3Rh%k?^%^pT;$B)`f2K#o^QE}XmPL!QpuJp!fMZugxjZ#&oT)hgi@ zm9*>QZv~MUFp+Sq)wucA_c`bP0cbZm^Ovnvtel60qM)`SMZ|Lbb^hS*>iQf_ZYbqn zVV0x}yei}pR!PdHlk+Yiir@hlEE`kkA_;59&B?M!Zi|-ZJfVT!_X~f5$b~*x74_u1 zgW&8yCZyd_6^>)FdA(UVOM5X9Yc3)^=kz+15}LgyJ-j~Nti9H1hPT5NVAFj6J#{GC z8)}DZxuAmxGAbvN&eaxtc!t{L(9u5%V%zyJ2rC;cicJ>qYhTGMn2}QPF1fGt>eP^` zb?h4!EgdE9-J1{^b^>y(H!Y-&##-q<7lg3L@p#69UikHX-8k(|)R-L|QdKT-4zV@a z>!t*rG19hE^Ue!V;!a+9ax*b>nKZl!7M0|~9p~sQn`vHuIieYN9$o~a<+b!x+H+_~SKG1Z51foj-rN==MRC$<*C#ETkCn>lXjUg0iGK$QF?7Zq)e)v& z)m+@AK7rw4^8I0zkWt0iHFbg5Nm@vi89?t>Q;Cr(HuVt^z}GeJMaQ$04OYD+iE!`O zH|ItTk|-@&qPJzH!fv&}pxX9F*SYvMBYJOSNXIju$2nJ{(e&0E6-g= zxSAQ#i~kZwb48nk8$I*Rn>Xe2vKh#`5*n$#X0LWy#jGsVZK29U4tmMk#$7K$91NGB zu>-Bolb8#B2Vy<{V<47v@k=CZglpOGG#=cn`+8EZGB?D3k#g9UIl794?z;PK9}h<# zO9)T;$B%(uoJPq_miqnH9KF{Z;y}s`YIXa&*7JtG!=v;7sz2bZIPT?351pr4h&@r@ zRBk^jU|zDcIe$KI-Yl)`p~UdUjr`6sRra>Zt}mFq_HVIq)I~k|Wn# zYtDqJLKhc{GwM7)`_)K4com60c7CV5jQ5s)YY}Qfo|}d-w-f z@0X=}4@Zp~{ZglXz))=7KN)UyXPt8`y0fx~B zd$MMaZVT~QB=^#rsg04E52O_QF{WTE6k0kl zTLohi`wPXi;uiE-&nBv_fW8y3M*tuwYlEHMK-%LTw{-K&q@(At7z?T*FMYfHsbdY+ zA6RDkZ9;6#usT_%yp&2KDDBH%9}pivd-!WkK`(%W*(aQc)CRY-a zDk`|ZI>!UC!3`X}_o61=OXsylx#f(fPycZ(+39lI2D6X5W!6>+MhwAC+-y_ua4)i}ntB?Q>NXMo1F5d~!~g&Q literal 0 HcmV?d00001 diff --git a/docs/build/media/Conway-Life-exe.png b/docs/build/media/Conway-Life-exe.png new file mode 100644 index 0000000000000000000000000000000000000000..94bad16e7d632701d1446043694e08bc0c931935 GIT binary patch literal 5189 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 X=a(3EYx%67{(zImt&SBNJKy*p0g6FD literal 0 HcmV?d00001 diff --git a/docs/build/media/github-copilot-fix-warning-accept.png b/docs/build/media/github-copilot-fix-warning-accept.png new file mode 100644 index 0000000000000000000000000000000000000000..bb8f3ded8765e3cdfdc9b23d5fd86eaf0b05c42d GIT binary patch literal 16661 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 literal 0 HcmV?d00001 diff --git a/docs/build/media/github-copilot-open-chat.png b/docs/build/media/github-copilot-open-chat.png new file mode 100644 index 0000000000000000000000000000000000000000..c89019f9abcc81ebc04b57df1a05b2a6cf47f28f GIT binary patch literal 11248 zcmb7qc{o(>`@f|yA&f|obp{z*rI0PVp)4i)nqaw0Xe~N~Nh83x& zb(@BU))D-^z{CLl-hBAt8~BIz$!%Q?n$ljr1@Pd6i~22f8k&kk=6%PL;4uWPXZeJN z=0fE04{hT7Z)X}BL-_5H0pnieiXG`L108drfu+P4sq`av0mkYR zb7!8d6gxw&S=-t{)JlZuP zh3puGKs%khydxHe!$YSCVDy?*8_>czksz@TQF`!~CJ(%%8*A zp_M5yd&s>Mq(9OuT=t}Q9GQucyV)DdeHXUoU?VIyZL1zp4R_ACls9Cru+CKCfAzi)VUNpvQX zaA`(a`{uDtVRn=~S2@UBEYB4Icjh8y_TNBXaMSD~@P_}mg6V_E|A*&pTkILBy_>Ii zq7lOgzj-Q_>o(%vPv8uj{>wAmh(fcrUdToMRN0G?B@%DUNUIMbprR2)eCJf~u5Yra z6VJBS5UaJ3c6LMk4skq)cD|Zv|79anwZd!0gu?RsX={_CqxJ7Hu=Pb3lqMHfNS>(a zDVxxK4=cDsoR{}98r6NB4!O5Qt;5w%zCclJr<;UuK{Ljdc`NnAJ(8E1r^G_!Fau~x zx+Jt+Vs#f+uTjvQ(f}{^57y2IxIa*ze}L5}NzEADO4!tNrw8pf;D$IwL~@mSI6xA!gWk{ATujhLY`y(f>UODUyTB<)A;)6Biop@L zkl!De>7GvfY+93F>H1W9dSp~+Q6AO?`iRxasUf^eT1} zVAfPVYG1E-3W!VB&l=?KnI&J7G8)w1$!N}5RSllMwSmZs{yPA+e)Y)_ zr8#7f^yg0`DLhf;=}^=Dh#=o3|1MKp9x7ky@y7el%@>q>@oL2u^Vd9A*=q8S7Xd2) zgr?JYuhR=U6_R{9Y+E1l^6KDAj3A@j$B$7T-taacgG!h;XBa#gMGf{@H^r?dURYU6 z;@F-`+pabGhgwVBR-^i^aQ;!{_DJMYTEwmhoT`B*SG%R>s;n1UH~PDXUr?6yQWw9K zVn)D}=<#TzKP`TCv{;qFuz)=cw^2KGy+oR<28RW!@UWnp#R9)#@ISWu8^DdG^w^vn z_U}})wkB1{l*3Wy6=w5bIBb^pko;D#FMYHyZB6D!FY|Zib8|I@x=e(0oH3#1Z^Yk* zgzWGCF@QDPCyCoP=m)mThKo7TkH6Z)N+f9vBBS zsRp`oyyKG9OD>P!7A3Lqo%}bNz$JMah3BEE<1wWa_49}0X=U8y&qJ^(_5vn1@JwpY z<>(lYP}Qa7sz&mQ_w|AW|1&K^)ye^Grhsn+^YVAR7o)G{SA9Q6^DLrTr3`H5&(ENL zE~o?x51W|^_$R>}+d}RAcH=Ro(>tF(rkwpHPJRKxZUmeS5{|p}v_2%qJA>MNP5b~rW(lr?R{$V(T`ZC3WtWRl7zYc+IA*^_B9{f9N}L*zuYaz2p7`7eGX z;$@a3R}%4MlhxfS`->C(!PcQ>`rA3J6~TI_JOJs~DeS0R$(YDg`M5j9U4JJcEo)N5 z%ae(MOLHx1s4Vp@7P!rO99)%pJPub`ILgMV5wJSt_b-47y2GB2w^|oBDsXrWYP<^p zH5DWa8!C1Fb}B^;mM<=iq9-vH-$ z>#4fWo6F~(YKnA_lIB*Et~*5x$BZco)zI_*BFcX^^Ii3MVjtAe6BHD*a7wW#>Y`(W zQA>01T;j??5%1(wYf^vK4JILnnSPFKLQJp2-R!$sexVhm)UAY#6wPAS2=o}Ml&PI(JLKVfq!ITLdhL?~hb$e1 z?JzivSm`S(Hvq8DzVVuNKo6WgT#FvVGa3_AAu^t98XRm5wUeyze9X7xgaEDIEnbK0 zJM{cWDKeHzWhIeBoFpR5>wo5iOx1uN7G`cqp1Fm0xjsfJo2dcoonj1E1pHR7G_J|1%AU||UaDG0 zwAiK$`&$de0hmK&LFM1d!j{c+oYQ^=QtJ*|FPHzXZlN>S@C-6wlJ&2xn=Y!KauL zY89M$-Qa;x9X^-omev=^YuQSxrvT#CKTq;EHdj4a()v;!15uCMlBiJ+<)srbIt)|K z)xv6J;e1A>$`-K65fbOeJ8Xh>Otll0@dbQBw+V%JL*=yy(6is5Sn%O93p##fxm~rO zdjE^0MH12)n=S2h(iNAor!H_^M!&tu=gm5rF2;T6$M`|g)>GSQBw^)Fqv5l{u@>F{ zDw|v>VBZ`RlNCsvHGXCm=HvPDCtlg#EjmS3w1NXB8HN-&!4Yp5?iv_2d|NlzhGh)* zdN|SOF*gxh=H5^~k4i9aa)md=&)JZox`f)@5F!GFMR;iNlk_ZQfBlQ+BCJk8=C+ax zkQQCzFDpvCoEH#tDK9; zaOX!1M&Toj{KfOf_lurCvaYEpX(yw9{#Y@7{S0)jNoCTWc1F3OuG)1rqDemR{`Vft zqnrKq>APubn~9=jEcA};074%=ITswHX|bZttNtow7fy-q8WZ~?7vvypwfwcG%?qpU-#(a6NmBvzq zv_NGAmjHLROAJLtI=JhIqDGHW9yE>jLmAj#7>Vu`q!vR_DpICyy38Hv(JAPO;K0Wl zp_jJ`^G-s_L!NC)qeMujOtIe6uHCrX-`tvlD(8e@tRpGt=XS3$chK9)zKt^XISTvG z%`2*Pwp@^mk?l^j)=!ZulZ8tH-V|18N5S>}v5~j&@e}>@UELCQyDY|c3LkdEHbsJV z+g%5oey5GzKur$B^pjNT_k@?DUY`&`dt$8zpVmUvToL?K#V!i{J3_>y1nblQ{D+mtR^`s z`SLkWlRulJMX`+PQx6QRRRpndWeTTHT0DCnd z*2F_=tUrubVdc^OXZmj!pF?|ZC_;5|g6=T6JryS}(wws{0|)#n;h4SaLm5B&Oyuu* zi3;D485Rl`Xon>{uFCG$Ex|$>W5Ni%(SuRDeBcV^E+LLKr9cB>e)ivsJj8M^1vie5 z(=?C@iw|6SUa48ktFFc4^lxNJnV(KY2kms-wf9!TZ(@y~iG*IVQ*hJ}S3!*RDNlSj zqhE`6Et7i<94&m25`u{Iq$45=kUImriFIlRGmHkVrmw~y(RF@`0N%jx9=kCPk}nOi zBG=!aHCIEVq95ip-sXf%AINOiR`p&-K)(~Os}Ab%xN^*G{+Lqr-K}cN@iST`=E1XN=8+2aw*Hb`xJ|b3-bA1cT{0DJ0;WuSMpU`6wiu?tG(2g^cMAfJSD6Lcdv5n@|f;8R*a<{ zMK!qc;GzievY5|Q687QhVRBQ^1%H93hm0NZ%sop4k$%zmsAV zVOHA|%$|u!(S)+EJ&|eP3FIt22a{wh@;dpR812rvS;&eIawy^+Y3ixEkK!Fm(Yo#L z&{0So*+eN?f5V}OG@_kZMwl`s20z>=4TYjOqa3S-t^2fE?a2>}m_SN9q8(7Q z2(`oA@9&|uN^fr&FlzW~SV117mD@sceGhlx>!Z%7AOVbQ(_;na#h-K>Y%Hf4Q?_1b zH7`lOma7wju~hQ~S0WmODt+{1AB z@rj39fAhezMMInjg0szyd*^-sY#(;s%2fWci6RcjLfb=^m0C_BY_Ro0`tHb=DgYJ`9*SlVACTw`)L8DsRY)aUI?#2Im3zgRXHb)`w0bm z8#O6+2{b{!wl&thGye$~j!-0~uiPKS;ZG!7r1f^CcOt9~T=&U$_#Btt|)qVNnsjsaFjT2jfjKU|>1=idOIU~}u9JEu1 zu~X*5HM=*qWRUumxm#^C1&bLXjt)OABJZc6O@h0Up`zS>U#aiXj({-tWKBnj{bf^V zIt_cZRBi-#-&sqzO{#$RJ0Lm&TFQ@(*wSBtVrQhIci;FL@F}2`Q*$EIYS@Hz`o&z8wP`0Ve65F!7R zEWiY!MzKisicX^s);hU7S=C1wYn0z1=aeY<;HOH6q#sjKo+Ftx`Tjy6JHF=Q`O$_@ zyE)s^U#{dctFk>sJ?d+mE^Gk5(25y0{7eu~BPZ~y{Ls-!s3ns%S7ut(M~8-ZGkGg}T?BBCEk}L2K=J^;kE9c?pt3 z=^05|wgFu!viDkg_`>=@l@Zer3Xs`stR)NxwGPhCBgKEuf$8rCB(jyWS_Z!}YkXY@ zb^&x+42+C*$$2u@{@RQVaO=K%3Vu`18C<-03?QVVH=5x&RPgf2Pg|k7y+J0oyWFbO zhWg(R?b!<5{#1e<%M*vbcwPa;E?BNXMl*EuK3!IREN3xh^MvBf6q!BoN_sB+ixgHQ(FRtlzOp>G@HBu_w=C!2j$*! zP7kQM58ubv*R;YUe~o-HJiE}@Wu9^N_b#wx@CRw(MP0OPow#f=CsJs#dnl!b9xAP^ z9O+|S~Bv1$ULfgd(*p$`)aTPK^S4gk-ORpQ8&vr%QkT{!~3DkOP-~n z%qLAy-7irgfZTcZwc)-XRX^ZWkAdbbShkK&;~y_mattqN-!5%hX}U)o;*wfg9FD*8 zqkgKQJhBUy&z^b*Doq(J9lI(9S9Y@VBEwipAG^OVI*j85Kd z+HeU23nbb!I6n|#`D;I~_oC2NZ?3KId|tyTm$+z98a90UFn_ylx5@~~<8Am_&@e~V zgZF$}xQWX;>z~OVVMvQ^Bh?im=6SoAw!IaIrxE9k`>;}4BSM8a4LgIY;p|$Vm@<-4 z{?$vT&HakSd}i9J>+V-s9lb$JiS3v6NR8sJ9TU-tme~zT1*1Ln>eB!8JS}sB$TZ5x zwQjbET`9D*oZ$Mys==^VY}NP6-84x#Yeha|vA2+@B@aRMEx5qU}f zGegnk?XIDyiP?CF*l-2zeWU81?<5Xfld=T)-Qgv0NE$+=#U(n9N2cfWOu7d$%n|@^ zr5lT`5aRDUErpgJ>Hzi5uB+;SPL5$?Xzd_a9LVD*mq5;pXbU1n7+J^j(w|x|eHWEiXpl9yX%|0k$YDwsckmobOSPz5P z27zbOf?|EL{9hIg;=_Nz>P`i)TRndt;x%0d>J=KEU$qJJ;h$G_qPI0bDCtTATNGNf z5H>!AUs%edZ4U4|yj?R==lFkrVde&*erx$r{q~BC5h3qr2E%(@dDgIDJ6O-A=fp9) z&x*fbt1eE*FJ(=LOyp;i?%(tn|AEH`WTp4^sL)=>!rKOnKEPExNg?)6Eqp_b{hG3D zZf&gab941%5`rb%efW*x(@YF(QetKRP9t{VCRCI;2g~TYs~QFP_RPz&ia4(DMr|FdJZ_xwQJd38=25Gm$1|3JQ(-aaes7S9wEPM zMU3vf1&|^YYvVsj@%GebXrZ1T&VLJ=Y&A@|GFoo2^SrQ|{!2ON4p#P1w5)CmAERY+ z7UJveUDqvL|IcgxAFnEG9(TgkEv=jFz`~j`BvnllWTb@k7SdkOU7!EZiKoyxw$zumt7f(KJhar$Et|6m}U?bE}LSHPnZ8xtTcC{2-}3 zupv=`P2KIHC2dSg@y31aPtJ>ocO0EDJ1EumXk{gah3@oQO1-rQVlZamdw}Sg3SCyN zmMtvqZt1O9VefJ5!b;qgUU9h2dsQoSg0NEkdJ5MYsnv%@-yd{an&^+$j+E%^P-1B4?RjM(;mhPlxxh&}H!6kJ)LgB# zJe%k{*OB{uW5~#NPSyK~YuJ){wrhcESI0<=z*5j-dVf8h`JxLXvpO=9Qtx{_aDVgi&e-1 zV(Xv`m{&cC&}@%UeFDuqifTouL=m+w*ot~)V@og43)K|7g-#7z;nDM*Tc>YbQj%Wv zo^JHJLt{r=7fb`_b&AdxKfV>{N8*zoI9tgyD27*DGW3+s0;GJL&!veW?341j+_ERv zG3B-=4Tw#TO{jvqO^@^g9(hAPa9vH4)uO)XB&|fI$k$VkJPib=BeqxgI4h*s1`T%3 zh?zI)=e6pO+ttz+{r>&{q(p@ZV8O#qNyy1Rrk``4aB)RHFFK+xA1X=Mf%r0*H>^$w zcN%QmUbGu+_Eoq|*r{Y_8gm@FlmEq9T|vWsEgU$T$8wAe(V6;wz4MJAI3OI0!-S?f zyrxZr9fLw-o1`-KYv!-XtANVGY=QM#<|hxXvO;8d8fo6cl-Js>dhYLhA}Jqt9vMLM zH8>JUSW=09O*2fAR?yX2^@5n@sV(B;ChKp@QtsHeH1xt3)$dYF5h4r>X82dRZpFuV z_$B}CU+P#V@AZVz%~pHZ7^$%v|6;ZKeEd$0vxeTI_n&}RhW}Td_#aBdsj>c65>jSW z^#N{KhetSk`Dlo{cQ?|ysemM9eOPLZ_h__kxL*=L{vxl*33hfL?f<~V(uK5$tU(&+ znvDtkf58)k5?39_T%<=q@b|Y?dCfXUt$a!{O#uF zP-rRZU&iLR`${)JaE>NXi6@A#Sp=Eqo1E8IaL>hf=AO%tpI>&FYzTdyyPJBjvFSVE z_AYX3I`Tpp3A@v-4;f`Ro;s-4ZBAv4kDr;qae6^lgrTL$06tOR9ywQ%5MK>0X*&kx-q?GdmhZ*=Dfd`yF+!lE2J@F=BQM?TFPJ`=&S zKW@G0c(c?UtO+x#98?{Ydj!={GkLPii&z}Bz|m5 z_{d*d%3c8QK6Bj^vxMWwxO)p?pqNxzrlQ2Zt0zq~OTadymwQbIITZm9HG5zzv?0GV zf5stuf4FD^Fh1@)PK3`+rhe`$$QebCmErPC%#H|RfDw$c}4yr-Wmi@7wh z{Z-y96*uoOZ5Blnv_oJ@F8$1b4Z2`eKJR@_e@x`PLh*Aj+suHOTF&|%kQ=;fI!1n% z69^|$-@cY~fh&7X*7lzmWwzY3_%I&c!(ZHVH>c!H#b$|Qk&3NO`&;-A&Npz++-haY z4vKiZ`gx+^VuyT&Ngm%K^?sPLlxhGJgR*Uxw;SJz9_zZhs1+|}NNBM$rr#oDt2~NQ z@IE&@Kr#4hig+Mh=?j2zY7BQB>n(Tv3B!|67mhERO*D?5q zzxW0WKHDSgXe;nFw75IU!$XmXWt&zVujp)*8l#sxj)i5P%-}+qX&xz8-uYz+!&pCk ze~?ID*8m7K2L7Z{e#Au5w&C_eYIJh>1*hTt80DR50Ai#@4|O1Aagm>#oLe$eZL;W%3J0UcTyA&Ic8=hiY`JVN;YRJVF9@O2 z0TrcR&zKQ*ws;FOx%HHGd7mtvhOj-3wc?QeCkd1RW*z3buJe;5!D~hezXy{qH7&0g z)M}#^6VK17f;IG`Jm88kFr6R>oM8qb@V_GUf3tvbDS!iIY9=8ec@W4inuFU@pxTyD z)xaIJ!Q)^3`OnE@M|nB9@2B~de=#sHOg05kCv#K+YytuTT*JUVS_1fK5m;jiq$_KY zNiApmU+K9f#N~KX&j0Yzh@`dIFR_|#H7|}&-*SWnuGIbfX4{r3OY4UZ4;GFHa@T%i zl4u`a)fbA$Xqa%je@eu0KY3hNZEqkmW~Wza^{Gpa|AQ#SCqLw>fqC!+yfQ4go?W4n zuB$kft8xN+vuOA>p{YaBnGy^2^f(14M=+oLAwA11U7M#>K9;WRu{zZl;KBQ8#>L`*!ef^>&E|M|@rt&CtB9;&R` z6*iJ$P-Lpa3K1{sNC~G75FbD9#_B9~Agyo@iRx-*7Cr(Lzd-7JFvD^9FI?uHc3O~f zgJ)M8`6)Me>Sl1gTKI`aQj_0N>CJM4ElH*E+g;ff`HMc~@jg$_RZ|desD#6X%kf(I zux#9O^{RGYKCk6yZ-($tai>^W(kvJh=`L5GW@?Pi59*|v231BQypkScS*@qL2F=@h z!;d?3gAHz41!k(rF4T1-*h*R+lQiqc%1qZ5E0>5nv$$G+&w)8!Y<3`5!Gp$qJf=-h z@~0w_(NlDW1z&x2zpB40V#Y`_rlv&?r_tN>dv7jkOpH3uPOPP+tzXu;IQMyrHTi_F z)+Q@P`bpTMoxK6)<%R_iLGLG(KUaOqD_8;qQ48lKP{d1}hgzKoeNQvMB=N)O?ai7Z zVylJm)Rr?b2@UinezNvDB|@(1Q>}kXw`Gz_1%ep!i~Wi*-iiV2R{7w@2pe8(@k~m& z6enXB@sZ{1gj5Vrl#_nX4$7_7?h{h*eV$V+4;Z?`0~xh$$$JlN7sz8WJ$fYCsd?JZ zc51uhf|w;qXZRx*B?eQV+S}pSu^{r%R!KBYv+s4;&1_(3>rN?9awaIOX3n6>=$eu0 zRQJPrwJ@XX7BR<06gArY(mCx@95OT)=VbDvfr}CsV8bKF3D}Y zS<=g#!say@N$`}VzeA0l(w`U@tZ**=9!NwU>=;^bQ-gOWk~lG6wI_Nija~{IH0kpS zUmX{alKrs6DYk~>LAi!nU7~8a5s?9oz1zO-M9(wFM9Pw&R~7QojQ{bC*fS;K#^11x z-LM*3ty99xiWtgRAxrte9;QhSYpbGaUoS2*H{di3K7?^Fnd#X#T{`7spFELNF|n=Y zmb=k;yWdyi`TK(;pOVR9WjLQ>hr?2IanUWJ;iSdW>1**&PiQhMuCto+W^z*a(A!aZ zj`Uk%X&hXfqN!+6P(AI}n|)YVA;+1DmOEAx$Xyi(yIof|r@BqBPXRW+j?Wgr8bXc^ z9iU1|O1zhU4C{^g@s~ROf`$M3G9Hf? zCs$iQ*iN6u(=(oqL)PMOqm(59rsHi8J3I;szwq_-9WWNKWKTu2s6w{4x9b}Nw(%E~ zd}>#6a%Pqvh=D4G+}er2iXiG1h^|pa1gn-*bQtj4NzHi^U6s?|vc3&Gbgidp~<$x3+nDc==Md*lP1NMe^mJvkzvnB=UJ5FrLQu_Lk0^ zhXy*X#yvNmIjgTg$9uND5NTs!_L<3GV{`N5be?r{aHDm-Pf5Vf*S?dPS07F;j(qB{ zsBz~KDufJlC?*8(9j(y>(#XtkUI90b>_~T+5J29zgaL|Q{LcFPa;C%@$8fnF*xuMU zfw-T20Nl#D#-WkP5)?9X8f9s9+7v_G^` zw;Jpa=bLl%?0t573}_XU_nYt(7G*8FV2$-S$9Y+((7WYP;+z2gbGDh29I}CA>yw{l zFy&lmTljGrG1G1-6CVlR(*?(7jVf?NV_g;TcGTM!XGj# z``U{$q4q)ZPkr~ygSqs*u5pttx4u>-bK}0In6rlYmpFzLZvC3O(4nSGBcR7bIAu{5 eHV4~3qJ>oNhqR3ixq`cNX^`56TBRBeVgCn(k-}2| literal 0 HcmV?d00001 diff --git a/docs/build/use-github-copilot-create-cpp-console-app.md b/docs/build/use-github-copilot-create-cpp-console-app.md new file mode 100644 index 00000000000..5cce63448bb --- /dev/null +++ b/docs/build/use-github-copilot-create-cpp-console-app.md @@ -0,0 +1,247 @@ +--- +title: Use GitHub Copilot to create a C++ console application in Visual Studio +description: "Learn how to use GitHub Copilot to create a C++ app using Microsoft C++ in Visual Studio." +ms.date: 10/23/2025 +ms.topic: "tutorial" +ms.custom: + - ai-assisted + - copilot-scenario-highlight +--- + +# Use GitHub Copilot to create a C++ console application in Visual Studio + +This tutorial shows you how to use GitHub Copilot to quickly create a C++ console application in Visual Studio. You'll create a console based version of Conway's Game of Life, a classic cellular automaton. + +Github Copilot is an AI-powered coding assistant that helps you write code faster, reduce errors, and explore new solutions. Some benefits of using Copilot when coding in C++: +- Generate entire C++ functions or classes as you type. +- Suggest code completions based on plain-language comments or prompts. +- Get help with complex algorithms, data structures, and standard library usage. +- Learn new APIs and modern C++ patterns through in-context examples. +- Receive context-aware suggestions based on your comments or code. +- Debug errors in your code. +- Simplify and refactor existing code. + +## Prerequisites + +- Visual Studio 2022 or later with the **Desktop development with C++** workload installed. +- GitHub Copilot subscription and extension enabled in Visual Studio. + +To verify you have the C++ workload installed: +1. Open Visual Studio Installer +1. Select **Modify** next to your Visual Studio installation +1. Ensure **Desktop development with C++** is checked + +:::image type="complex" source="media/vs2019-choose-console-app.png" alt-text="Screenshot of the create a new project dialog."::: +The create a new project dialog with the Console App template selected. That template says: Run code in a windows terminal. Prints hello world by default. Has the tags c++, Windows, and Console. +:::image-end::: + +1. If not installed, select it and Select **Modify** + +- You'll need to install GitHub Copilot and have a GitHub copilot license. For more information, see [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states). + +## Create a project + +1. Open Visual Studio and select **Create a new project**. +1. Search for "Console App" and select the **Console App** template for C++. + +:::image type="complex" source="media/vs2019-choose-console-app.png" alt-text="Screenshot of the create a new project dialog."::: +The create a new project dialog with the Console App template selected. That template says: Run code in a windows terminal. Prints hello world by default. Has the tags c++, Windows, and Console. +:::image-end::: + +1. Select **Next**. +1. Set the project name to **ConwayLife** and choose your desired location. +1. Select **Create**. +1. Once the project opens, locate the `ConwayLife.cpp` file in Solution Explorer. +1. Open `ConwayLife.cpp` and delete all the existing code to start with a clean slate. + +## Use Copilot to create an app + +Now you'll use GitHub Copilot to generate the Conway's Game of Life implementation. + +1. Open the Copilot Chat window by selecting the Copilot icon in the toolbar: + +:::image type="content" source="./media/github-copilot-open-chat.png" alt-text="Screenshot of the Github icon dropdown. Open Chat Window is selected."::: + +1. In the chat window, enter the following prompt: + +``` +Create a C++ console application that implements Conway's Game of Life. The program should: +- Use a 40x20 grid displayed with asterisks (*) for live cells and spaces for dead cells +- Start with a random initial pattern +- Display each generation for 500ms before showing the next +- Allow the user to press any key to exit the program +- Include proper headers and use standard C++ practices +- Clear the console between generations to provide an animation effect +``` + +3. Copilot generates C++ code for Conway's Game of Life. +4. Copy the generated code and paste it into your empty `life.cpp` file. +5. Build the project by pressing **F6** or selecting **Build > Build Solution**. +6. Run the program by pressing **F5** or **Ctrl+F5**. + +> [!NOTE] +> The exact code generated by Copilot may vary slightly from run to run and model to model, but the core functionality should be consistent. If the generated code doesn't compile immediately, you can ask Copilot to fix any compilation errors. GitHub Copilot is powered by AI, so surprises and mistakes are possible. For more information, see [Copilot FAQs](https://aka.ms/copilot-general-use-faqs). + +### Example of typical generated code structure + +Your generated code will likely include these components: + +- Headers for console manipulation, random number generation, and timing +- A 2D array or vector to represent the game grid +- Functions to initialize the grid, apply Conway's rules, and display the current state +- A main loop that continues until a key is pressed + +Here is an example of the code that GitHub Copilot generated given the previous prompt: + +```cpp +// Code generated by GitHub Copilot +#include +#include +#include +#include // for _kbhit and _getch + +using namespace std; + +int step = 0; +const int rows = 20; +const int cols = 40; + +void printGrid(int grid[rows][cols]) +{ + cout << "Step: " << step << endl; + for (int i = 0; i < rows; ++i) + { + for (int j = 0; j < cols; ++j) + { + cout << (grid[i][j] ? '*' : ' '); + } + cout << endl; + } +} + +int countNeighbors(int grid[rows][cols], int x, int y) +{ + int count = 0; + for (int i = -1; i <= 1; ++i) + { + for (int j = -1; j <= 1; ++j) + { + if (i == 0 && j == 0) + { + continue; + } + + int ni = x + i; + int nj = y + j; + if (ni >= 0 && ni < rows && nj >= 0 && nj < cols) + { + count += grid[ni][nj]; + } + } + } + return count; +} + +void updateGrid(int grid[rows][cols]) +{ + int newGrid[rows][cols] = { 0 }; + for (int i = 0; i < rows; ++i) + { + for (int j = 0; j < cols; ++j) + { + int neighbors = countNeighbors(grid, i, j); + if (grid[i][j] == 1) + { + newGrid[i][j] = (neighbors < 2 || neighbors > 3) ? 0 : 1; + } + else + { + newGrid[i][j] = (neighbors == 3) ? 1 : 0; + } + } + } + // Copy newGrid back to grid + for (int i = 0; i < rows; ++i) + { + for (int j = 0; j < cols; ++j) + { + grid[i][j] = newGrid[i][j]; + } + } +} + +int main() +{ + int grid[rows][cols] = { 0 }; + + // Initial configuration (a simple glider) + grid[1][2] = 1; + grid[2][3] = 1; + grid[3][1] = 1; + grid[3][2] = 1; + grid[3][3] = 1; + + while (true) + { + if (_kbhit()) // Check if a key has been pressed + { + _getch(); // Consume the key + break; // Exit the loop + } + printGrid(grid); + updateGrid(grid); + std::this_thread::sleep_for(std::chrono::milliseconds(100)); + cout << "\033[H\033[J"; // Clear the screen + step++; + } + + return 0; +} +``` +When you run the application, you should see an animated display of Conway's Game of Life with patterns evolving over time. Press a key to exit the program. + +:::image type="content" source="./media/conway-life-exe.png" alt-text="Screenshot of Conway Life running in a command window, displaying the evolving grid of cells."::: + +In the code example, the code generates a warning: `Return value ignored: '_getch'`. You can ask GitHub Copilot to fix it. Select the code editor and press **Alt+/** (Windows) to open the Copilot chat, then enter: + +:::image type="content" source="./media/github-copilot-fix-warning.png" alt-text="Screenshot of the GitHub Copilot chat window. The text: Fix warning C6031 is in the chat window."::: + +GitHub Copilot will suggest a fix to handle the return value properly. Press Tab to accept the changes: + +:::image type="content" source="./media/github-copilot-fix-warning-accept.png" alt-text="Screenshot of the GitHub Copilot proposed changes. Tab to accept. Alt+Del to discard."::: + +Congratulations! You've successfully used GitHub Copilot to create a fully functional Conway's Game of Life console application in C++. You've learned how to: + +- Craft an effective prompt to generate C++ code +- Use Copilot's chat interface to create an entire application from scratch +- Fix compilation warnings with AI assistance + +## Improve your prompting skills + +For better results with GitHub Copilot, consider these prompting resources: + +- [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Official best practices and tips +- [OpenAI's GPT best practices](https://platform.openai.com/docs/guides/prompt-engineering) - General AI prompting techniques +- [Copilot prompting guide](https://github.blog/2023-06-20-how-to-write-better-prompts-for-github-copilot/) - Specific guidance for code generation + +## Troubleshooting + +### Missing C++ desktop workload +If you can't find the Console App template: +1. Install the **Desktop development with C++** workload through Visual Studio Installer +2. Restart Visual Studio after installation + +### Copilot not responding +- Ensure you have an active GitHub Copilot subscription +- Check that the GitHub Copilot extension is enabled in Visual Studio +- Try signing out and back into your GitHub account in Visual Studio + +### Generated code won't compile +- Ask Copilot to fix specific compilation errors by pasting the error message +- Try refining your prompt to be more specific about C++ standards or requirements +- Ensure all necessary headers are included (Copilot usually handles this automatically) + +## Next steps + +- [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Dive deeper into AI-assisted development +- [Awesome ChatGPT Prompts](https://github.com/f/awesome-chatgpt-prompts) - Community-driven prompting examples for inspiration \ No newline at end of file diff --git a/docs/get-started/toc.yml b/docs/get-started/toc.yml index 2944683f36f..382c539cf83 100644 --- a/docs/get-started/toc.yml +++ b/docs/get-started/toc.yml @@ -6,8 +6,8 @@ items: href: ../build/vscpp-step-0-installation.md - name: Visual Studio guided tour href: /visualstudio/get-started/visual-studio-ide - - name: Create a C++ app with Copilot - href: ../build/create-cpp-app-with-github-copilot.md + - name: Use GitHub Copilot to create a C++ console application in Visual Studio + href: ../build/use-github-copilot-create-cpp-console-app.md - name: Create and edit a C++ console app project href: ../build/vscpp-step-1-create.md - name: Build and run a C++ console app project From f011312104479e01fac3534fcb8886c7c8f4a42a Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Thu, 23 Oct 2025 16:49:16 -0700 Subject: [PATCH 11/20] formatting --- .../desktop-development-cpp-workload.png | Bin 0 -> 7316 bytes ...e-github-copilot-create-cpp-console-app.md | 38 +++++++++--------- 2 files changed, 18 insertions(+), 20 deletions(-) create mode 100644 docs/build/media/desktop-development-cpp-workload.png diff --git a/docs/build/media/desktop-development-cpp-workload.png b/docs/build/media/desktop-development-cpp-workload.png new file mode 100644 index 0000000000000000000000000000000000000000..a321200feb51a93b0febf1a84503e2e99d000159 GIT binary patch literal 7316 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

1%5q|nBso<6VE=VPK4R&1( z%gJ=UWz#b5UU*eIL#oTB)7J(&o#-oE3_HKIG(79NP;}@+v%KhawWQF2^38kPYkYqp zUZJ%0Xi`rRi`Fg#6;Jhx)2$D1h;jHAr6r4GEUu585qTV36@#rn-W0<(TF7ubC z(m=hBtux*Tm~3lF71AsPD5dIP_#q7Xk5UzU6xnNqT#``3Qu2W}2(=_6qBrnCpOjfOQoe7T&YM zUeH}OM0-3cR+q`))Hh|*kE?p&-}2mlGWX8=lIe57>eqenTEgOaSNMDjfqHbtc zNUa)QZQfV*R+&}`(~>JQJ5QGA-UFp^6TK{%eD_2cV>wIfLV`VmOk_8=3BucQ`GEiF zk(LbDfZ1A-u{Z83Y_UnKzX;c6cze-oVASpS+f`0wV8 zf#k>Y9@+(Bs}FKQ;o4^qZkc$-r|ui>pP6(twtmK>-t7@QA5l2=V5*ZcH4Oss)sP zL&U$d!rrh70jmr5!{V3lw>@2aR^r1iZf213u1yu0Il|C}#|cmx#Xlk)aiO^=-dM$j z?{N@)Atkf8dFTS12NL7lWGuURqBo7Dw;oi*NM(=*0_vcDOOF*0>GU zzg?QHyExU}>XAR@LMNz1ua@G>2VN1XaT+%vvepTyVW3AR8b<1jzdQpbY-n-Mumhsg zTU=;{%GV~E#FE)-b;ncauitC}=W#3STT|h8PfUIxb{Bclj%-f~Sc7 z1IES6vns^AGdO2WOlbk>aP~+)P8&jU<@Hz%j>t4L;oc#D7fyjasX*a|3xfhOJ5^%c z$>neF!5Yee3M(TclU|F4ash|!Rrk4=sbR$pFS3_XQysPw2cz)syE1P3Tbjd~3VIrR5EB~v7^J0dmoBTbTsm*LAo9wFea@|HkCzn%v5Zc< z&6)B%dBIz~+}UPuOMxf)(mm<)3e|;HY--qB-*ZVFagmDE0r(KvW8Cw~9wY|#p+|IK zI{&Yd+RZ52ItEPN?}BJ2PiTYq+E^H2|3I;D-hM=xeL@-C2Lv))$pGO>8ikrhsNc1{;0_ly@qDw{h?sNlGm;0~NDlONZb z`nVL9M|u&{g9$3K#xB?*p*Ae32ExkhLRWA4>DKitqJz9tgMxa0qy6j8c1~ejgmyKv z_Vfk6yqQUw&c?L z%SPJX2TFpvDO%Bp%oUf`gXs@@>Q49+Wci@J79CjvLRz=?+O~5RK1>^ZHIr8GKCpXr zC*hh5V4vG_Mzxe0`6FlyL7ibsf4BVN?>0OS0*7Q~N=;LQo9BrOd;WIGV4 zzH{*~EmgLha>NIYE`c3`#te4{pYzuS!0RK)Oa8Q!`brLoS4ZmA~vPY&8!$oKt0LI_;Uj$z;^P5-}lr9!X}WONf}?lTzC&^sam z^wAI+3%z#7E0sUMiN^m+UUske0xqrg%nZvclPEUfF1Q)`E3!ADc4KH1<`cQ%*KWjo zXl8t36^2y(^L<;*XMv zhDEg%an=u!Bo&8U`+%35rYVX2wn)G&L$;?x&WroXbgjsa5trFDQ9zC- zvN%($Bwkr+i>gQS1iNBN4vI(uQlAp`OFewK1P&eiGw2r9;@p~And*Fzi}Oh^;Bxfq zj#Bx94}IHye?RMLN=I|YCuUng0hp>3nZH~-&i?hU?;f!BwV}soJC2RF-yf!K^u Date: Fri, 24 Oct 2025 11:35:45 -0700 Subject: [PATCH 12/20] draft --- ...e-github-copilot-create-cpp-console-app.md | 27 ++++++++++--------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/build/use-github-copilot-create-cpp-console-app.md b/docs/build/use-github-copilot-create-cpp-console-app.md index b59e4fcbef0..5ad9c728b54 100644 --- a/docs/build/use-github-copilot-create-cpp-console-app.md +++ b/docs/build/use-github-copilot-create-cpp-console-app.md @@ -10,7 +10,7 @@ ms.custom: # Use GitHub Copilot to create a C++ console application in Visual Studio -This tutorial shows you how to use GitHub Copilot to quickly create a C++ console application in Visual Studio. You create a console based version of Conway's Game of Life, a classic cellular automaton. +This tutorial shows you how to use GitHub Copilot to quickly create a C++ console application in Visual Studio. You create a console version of Conway's Game of Life, a classic cellular automaton. Github Copilot is an AI-powered coding assistant that helps you write code faster, reduce errors, and explore new solutions. Some benefits of using Copilot when coding in C++: - Generate entire C++ functions or classes as you type. @@ -24,18 +24,18 @@ Github Copilot is an AI-powered coding assistant that helps you write code faste ## Prerequisites - Visual Studio 2022 or later with the **Desktop development with C++** workload installed. -- GitHub Copilot subscription and extension enabled in Visual Studio. +- GitHub Copilot subscription. For more information about a free GitHub Copilot subscription, see [Use GitHub Copilot for free in Visual Studio](/visualstudio/ide/copilot-free-plan). To verify you have the C++ workload installed: 1. Open Visual Studio Installer 1. Select **Modify** next to your Visual Studio installation 1. Ensure **Desktop development with C++** is checked: - :::image type="content" source="./media/desktop-development-cpp-workload" alt-text="Screenshot of the Visual Studio Installer with the Workloads tab selected. Desktop development with c++ is selected."::: + :::image type="content" source="./media/desktop-development-cpp-workload.png" alt-text="Screenshot of the Visual Studio Installer with the Workloads tab selected. Desktop development with c++ is selected."::: 1. If it isn't installed, select it and choose **Modify**. -- Install GitHub Copilot and have a GitHub copilot license. For more information, see [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states). +For more information about installing GitHub Copilot, see [Manage GitHub Copilot installation and state](/visualstudio/ide/visual-studio-github-copilot-install-and-states). ## Create a project @@ -47,18 +47,18 @@ To verify you have the C++ workload installed: :::image-end::: 1. Select **Next**. -1. Set the project name to **ConwayLife** and choose your desired location. +1. Set the project name to **ConwayLife** and choose the location for the project. 1. Select **Create**. -1. Once the project opens, locate the `ConwayLife.cpp` file in Solution Explorer. +1. Once the project opens, find the `ConwayLife.cpp` file in Solution Explorer. 1. Open `ConwayLife.cpp` and delete all the existing code to start with a clean slate. ## Use Copilot to create an app Use GitHub Copilot to generate the Conway's Game of Life implementation. -1. Open the Copilot Chat window by selecting the Copilot icon in the toolbar: +1. Open the Copilot chat window by selecting the Copilot icon in the toolbar: - :::image type="content" source="./media/github-copilot-open-chat.png" alt-text="Screenshot of the Github icon dropdown. Open Chat Window is selected."::: + :::image type="content" source="media/github-copilot-open-chat.png" alt-text="Screenshot of the Github icon dropdown. Open Chat Window is selected."::: 1. In the chat window, enter the following prompt: @@ -72,10 +72,10 @@ Create a C++ console application that implements Conway's Game of Life. The prog - Clear the console between generations to provide an animation effect ``` -3. Copilot generates C++ code for Conway's Game of Life. -4. Copy the generated code and paste it into your empty `life.cpp` file. -5. Build the project by pressing **F6** or selecting **Build > Build Solution**. -6. Run the program by pressing **F5** or **Ctrl+F5**. +1. Copilot generates C++ code for Conway's Game of Life. +1. Copy the generated code and paste it into your empty `life.cpp` file. +1. Build the project by pressing **F6** or selecting **Build > Build Solution**. +1. Run the program by pressing **F5** or **Ctrl+F5**. > [!NOTE] > The exact code generated by Copilot may vary slightly from run to run and model to model, but the core functionality should be consistent. If the generated code doesn't compile immediately, you can ask Copilot to fix any compilation errors. GitHub Copilot is powered by AI, so surprises and mistakes are possible. For more information, see [Copilot FAQs](https://aka.ms/copilot-general-use-faqs). @@ -241,5 +241,6 @@ If you can't find the Console App template: ## Next steps -- [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Dive deeper into AI-assisted development +- [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states)\ +- [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Dive deeper into AI-assisted development\ - [Awesome ChatGPT Prompts](https://github.com/f/awesome-chatgpt-prompts) - Community-driven prompting examples for inspiration \ No newline at end of file From 39f1ff01706122b274e0d7879701eb65767e5b24 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 24 Oct 2025 14:11:51 -0700 Subject: [PATCH 13/20] draft --- .../{Conway-Life-exe.png => life-exe.png} | Bin ...e-github-copilot-create-cpp-console-app.md | 71 +++++++++--------- 2 files changed, 36 insertions(+), 35 deletions(-) rename docs/build/media/{Conway-Life-exe.png => life-exe.png} (100%) diff --git a/docs/build/media/Conway-Life-exe.png b/docs/build/media/life-exe.png similarity index 100% rename from docs/build/media/Conway-Life-exe.png rename to docs/build/media/life-exe.png diff --git a/docs/build/use-github-copilot-create-cpp-console-app.md b/docs/build/use-github-copilot-create-cpp-console-app.md index 5ad9c728b54..accd7e1b63d 100644 --- a/docs/build/use-github-copilot-create-cpp-console-app.md +++ b/docs/build/use-github-copilot-create-cpp-console-app.md @@ -1,14 +1,14 @@ --- -title: Use GitHub Copilot to create a C++ console application in Visual Studio +title: Use AI to create a C++ console application in Visual Studio description: "Learn how to use GitHub Copilot to create a C++ app using Microsoft C++ in Visual Studio." -ms.date: 10/23/2025 +ms.date: 10/24/2025 ms.topic: "tutorial" ms.custom: - ai-assisted - copilot-scenario-highlight --- -# Use GitHub Copilot to create a C++ console application in Visual Studio +# Use AI to create a C++ console application in Visual Studio This tutorial shows you how to use GitHub Copilot to quickly create a C++ console application in Visual Studio. You create a console version of Conway's Game of Life, a classic cellular automaton. @@ -24,21 +24,23 @@ Github Copilot is an AI-powered coding assistant that helps you write code faste ## Prerequisites - Visual Studio 2022 or later with the **Desktop development with C++** workload installed. -- GitHub Copilot subscription. For more information about a free GitHub Copilot subscription, see [Use GitHub Copilot for free in Visual Studio](/visualstudio/ide/copilot-free-plan). +- GitHub Copilot. For more information, see [Get started with GitHub Copilot](/visualstudio/ide/visual-studio-github-copilot-get-started). To verify you have the C++ workload installed: 1. Open Visual Studio Installer 1. Select **Modify** next to your Visual Studio installation 1. Ensure **Desktop development with C++** is checked: - :::image type="content" source="./media/desktop-development-cpp-workload.png" alt-text="Screenshot of the Visual Studio Installer with the Workloads tab selected. Desktop development with c++ is selected."::: + :::image type="content" source="media/desktop-development-cpp-workload.png" alt-text="Screenshot of the Visual Studio Installer with the Workloads tab selected. Desktop development with c++ is selected."::: 1. If it isn't installed, select it and choose **Modify**. -For more information about installing GitHub Copilot, see [Manage GitHub Copilot installation and state](/visualstudio/ide/visual-studio-github-copilot-install-and-states). +For more information about installing Copilot, see [Manage GitHub Copilot installation and state](/visualstudio/ide/visual-studio-github-copilot-install-and-states). ## Create a project +Visual Studio uses *projects* to organize the code for an app, and *solutions* to organize your projects. A project contains all the options, configurations, and rules used to build your apps. It manages the relationship between all the project's files and any external files. To create your app, first, create a new project and solution. + 1. Open Visual Studio and select **Create a new project**. 1. Search for "Console App" and select the **Console App** template for C++. @@ -50,35 +52,33 @@ For more information about installing GitHub Copilot, see [Manage GitHub Copilot 1. Set the project name to **ConwayLife** and choose the location for the project. 1. Select **Create**. 1. Once the project opens, find the `ConwayLife.cpp` file in Solution Explorer. -1. Open `ConwayLife.cpp` and delete all the existing code to start with a clean slate. +1. Open `ConwayLife.cpp` and delete the default "Hello, World!" code to start with a clean slate. ## Use Copilot to create an app -Use GitHub Copilot to generate the Conway's Game of Life implementation. +You prompt Copilot by describing the functionality you want. Here's an example of how to prompt Copilot to generate an implementation of Conway's Game of Life. 1. Open the Copilot chat window by selecting the Copilot icon in the toolbar: :::image type="content" source="media/github-copilot-open-chat.png" alt-text="Screenshot of the Github icon dropdown. Open Chat Window is selected."::: 1. In the chat window, enter the following prompt: - -``` -Create a C++ console application that implements Conway's Game of Life. The program should: -- Use a 40x20 grid displayed with asterisks (*) for live cells and spaces for dead cells -- Start with a random initial pattern -- Display each generation for 500ms before showing the next -- Allow the user to press any key to exit the program -- Include proper headers and use standard C++ practices -- Clear the console between generations to provide an animation effect -``` - + ```copilot-prompt + Create a C++ console application that implements Conway's Game of Life. The program should: + - Use a 40x20 grid displayed with asterisks (*) for live cells and spaces for dead cells + - Start with a random initial pattern + - Display each generation for 500ms before showing the next + - Allow the user to press any key to exit the program + - Include proper headers and use standard C++ practices + - Clear the console between generations to provide an animation effect + ``` 1. Copilot generates C++ code for Conway's Game of Life. 1. Copy the generated code and paste it into your empty `life.cpp` file. 1. Build the project by pressing **F6** or selecting **Build > Build Solution**. 1. Run the program by pressing **F5** or **Ctrl+F5**. > [!NOTE] -> The exact code generated by Copilot may vary slightly from run to run and model to model, but the core functionality should be consistent. If the generated code doesn't compile immediately, you can ask Copilot to fix any compilation errors. GitHub Copilot is powered by AI, so surprises and mistakes are possible. For more information, see [Copilot FAQs](https://aka.ms/copilot-general-use-faqs). +> The exact code generated by Copilot may vary slightly from run to run and model to model, but the core functionality should be consistent. If the generated code doesn't compile immediately, you can ask Copilot to fix any compilation errors. Copilot is powered by AI, so surprises and mistakes are possible. For more information, see [Copilot FAQs](https://aka.ms/copilot-general-use-faqs). ### Example of typical generated code structure @@ -89,7 +89,7 @@ Your generated code likely includes these components: - Functions to initialize the grid, apply Conway's rules, and display the current state - A main loop that continues until a key is pressed -Here is an example of the code that GitHub Copilot generated given the previous prompt: +Here is an example of the code that Copilot generated given the previous prompt: ```cpp // Code generated by GitHub Copilot @@ -198,15 +198,15 @@ int main() ``` When you run the application, you should see an animated display of Conway's Game of Life with patterns evolving over time. To exit the program, press a key. -:::image type="content" source="./media/conway-life-exe.png" alt-text="Screenshot of Conway Life running in a command window, displaying the evolving grid of cells."::: +:::image type="content" source="./media/life-exe.png" alt-text="Screenshot of Conway Life running in a command window, displaying the evolving grid of cells."::: -In the code example, the code generates a warning: `Return value ignored: '_getch'`. You can ask GitHub Copilot to fix it. Select the code editor and press **Alt+/** (Windows) to open the Copilot chat, then enter: +In the code example, the code generates a warning: `Return value ignored: '_getch'`. You can ask Copilot to fix it. Select the code editor and press **Alt+/** (Windows) to open the Copilot chat, then enter: -:::image type="content" source="./media/github-copilot-fix-warning.png" alt-text="Screenshot of the GitHub Copilot chat window. The text: Fix warning C6031 is in the chat window."::: +:::image type="content" source="./media/github-copilot-fix-warning.png" alt-text="Screenshot of the Copilot chat window. The text: Fix warning C6031 is in the chat window."::: -GitHub Copilot suggests a fix to handle the return value properly. To accept the changes, press the Tab key: +Copilot suggests a fix to handle the return value properly. To accept the changes, press the Tab key: -:::image type="content" source="./media/github-copilot-fix-warning-accept.png" alt-text="Screenshot of the GitHub Copilot proposed changes. Tab to accept. Alt+Del to discard."::: +:::image type="content" source="./media/github-copilot-fix-warning-accept.png" alt-text="Screenshot of the Copilot proposed changes. Tab to accept. Alt+Del to discard."::: Congratulations! You successfully used GitHub Copilot to create a fully functional Conway's Game of Life console application in C++. You learned how to: @@ -216,7 +216,7 @@ Congratulations! You successfully used GitHub Copilot to create a fully function ## Improve your prompting skills -For better results with GitHub Copilot, consider these prompting resources: +For better results with Copilot, see these prompting resources: - [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Official best practices and tips - [OpenAI's GPT best practices](https://platform.openai.com/docs/guides/prompt-engineering) - General AI prompting techniques @@ -224,20 +224,21 @@ For better results with GitHub Copilot, consider these prompting resources: ## Troubleshooting -### Missing C++ desktop workload -If you can't find the Console App template: -1. Install the **Desktop development with C++** workload through Visual Studio Installer -2. Restart Visual Studio after installation +### Missing console app template + +The **New Project** dialog should show a **Console App** template that has **C++**, **Windows**, and **Console** tags. If you don't see it, it might be filtered out of the list, or it might not be installed. First, check the filter dropdowns at the top of the list of templates. Set them to **C++**, **Windows**, and **Console**. The C++ **Console App** template should appear; otherwise, the **Desktop development with C++** workload isn't installed. + +To install **Desktop development with C++**, you can run the installer right from the **Create a new project** dialog. Choose the **Install more tools and features** link at the bottom of the **Create a new project** dialog, beneath the list of templates. If the **User Account Control** dialog requests permissions, choose **Yes**. In the installer, make sure the **Desktop development with C++** workload is checked. Then choose **Modify** to update your Visual Studio installation. ### Copilot not responding -- Ensure you have an active GitHub Copilot subscription -- Check that the GitHub Copilot extension is enabled in Visual Studio + +- Ensure you have an active GitHub Copilot subscription. - Try signing out and back into your GitHub account in Visual Studio ### Generated code doesn't compile + - Ask Copilot to fix specific compilation errors by pasting the error message into Copilot chat. -- Try refining your prompt to be more specific about C++ standards or requirements. -- Ensure all necessary headers are included (Copilot usually handles this automatically). +- Try refining your prompt to be more specific about what you want the app to do. ## Next steps From 5f2c38ffe85ccf9d7ee24804f9281debf5f96c0e Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 24 Oct 2025 14:27:16 -0700 Subject: [PATCH 14/20] draft --- ...e-github-copilot-create-cpp-console-app.md | 26 ++++++++++--------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/docs/build/use-github-copilot-create-cpp-console-app.md b/docs/build/use-github-copilot-create-cpp-console-app.md index accd7e1b63d..4797c8f81ba 100644 --- a/docs/build/use-github-copilot-create-cpp-console-app.md +++ b/docs/build/use-github-copilot-create-cpp-console-app.md @@ -12,7 +12,9 @@ ms.custom: This tutorial shows you how to use GitHub Copilot to quickly create a C++ console application in Visual Studio. You create a console version of Conway's Game of Life, a classic cellular automaton. -Github Copilot is an AI-powered coding assistant that helps you write code faster, reduce errors, and explore new solutions. Some benefits of using Copilot when coding in C++: +Conway's Game of Life was devised by mathematician John Conway. It consists of a grid of cells that can be either alive or dead. The game evolves automatically based on simple rules and produces complex, evolving patterns that demonstrate how intricate behavior can emerge from basic mathematical rules. + +GitHub Copilot is an AI-powered coding assistant that helps you write code faster, reduce errors, and explore new solutions. Some benefits of using Copilot when coding in C++: - Generate entire C++ functions or classes as you type. - Suggest code completions based on plain-language comments or prompts. - Get help with complex algorithms, data structures, and standard library usage. @@ -44,19 +46,19 @@ Visual Studio uses *projects* to organize the code for an app, and *solutions* t 1. Open Visual Studio and select **Create a new project**. 1. Search for "Console App" and select the **Console App** template for C++. - :::image type="complex" source="media/vs2019-choose-console-app.png" alt-text="Screenshot of the create a new project dialog."::: - The create a new project dialog with the Console App template selected. That template says: Run code in a windows terminal. Prints hello world by default. Has the tags c++, Windows, and Console. + :::image type="complex" source="media/vs2019-choose-console-app.png" alt-text="Screenshot of the Create a new project dialog."::: + The Create a new project dialog is shown with the Console App template selected. The template says: Run code in a windows terminal. Prints hello world by default. Has the tags c++, Windows, and Console. :::image-end::: 1. Select **Next**. -1. Set the project name to **ConwayLife** and choose the location for the project. +1. Set the project name to **Life** and choose the location for the project. 1. Select **Create**. -1. Once the project opens, find the `ConwayLife.cpp` file in Solution Explorer. -1. Open `ConwayLife.cpp` and delete the default "Hello, World!" code to start with a clean slate. +1. Once the project opens, find the `Life.cpp` file in Solution Explorer. +1. Open `Life.cpp` and delete the default "Hello, World!" code to start with a clean slate. ## Use Copilot to create an app -You prompt Copilot by describing the functionality you want. Here's an example of how to prompt Copilot to generate an implementation of Conway's Game of Life. +You prompt Copilot by describing the functionality you want. In this section, you'll learn how to prompt Copilot to generate an implementation of Conway's Game of Life. 1. Open the Copilot chat window by selecting the Copilot icon in the toolbar: @@ -73,7 +75,7 @@ You prompt Copilot by describing the functionality you want. Here's an example o - Clear the console between generations to provide an animation effect ``` 1. Copilot generates C++ code for Conway's Game of Life. -1. Copy the generated code and paste it into your empty `life.cpp` file. +1. Copy the generated code and paste it into your empty `Life.cpp` file. 1. Build the project by pressing **F6** or selecting **Build > Build Solution**. 1. Run the program by pressing **F5** or **Ctrl+F5**. @@ -82,14 +84,14 @@ You prompt Copilot by describing the functionality you want. Here's an example o ### Example of typical generated code structure -Your generated code likely includes these components: +Your generated code will likely include these key components: - Headers for console manipulation, random number generation, and timing - A 2D array or vector to represent the game grid - Functions to initialize the grid, apply Conway's rules, and display the current state - A main loop that continues until a key is pressed -Here is an example of the code that Copilot generated given the previous prompt: +Here's an example of the code that Copilot generated using the previous prompt: ```cpp // Code generated by GitHub Copilot @@ -200,11 +202,11 @@ When you run the application, you should see an animated display of Conway's Gam :::image type="content" source="./media/life-exe.png" alt-text="Screenshot of Conway Life running in a command window, displaying the evolving grid of cells."::: -In the code example, the code generates a warning: `Return value ignored: '_getch'`. You can ask Copilot to fix it. Select the code editor and press **Alt+/** (Windows) to open the Copilot chat, then enter: +In the preceding code example, the code generates a warning: `Return value ignored: '_getch'`. You can ask Copilot to fix it. Select the code editor and press **Alt+/** (Windows) to open the Copilot chat, then enter: :::image type="content" source="./media/github-copilot-fix-warning.png" alt-text="Screenshot of the Copilot chat window. The text: Fix warning C6031 is in the chat window."::: -Copilot suggests a fix to handle the return value properly. To accept the changes, press the Tab key: +Copilot suggests a fix to handle the return value properly. To accept the changes, select **Tab**: :::image type="content" source="./media/github-copilot-fix-warning-accept.png" alt-text="Screenshot of the Copilot proposed changes. Tab to accept. Alt+Del to discard."::: From a82c21e039539194036057848ba14ab93f79fc39 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 24 Oct 2025 14:42:54 -0700 Subject: [PATCH 15/20] draft --- docs/build/vscpp-step-0-installation.md | 4 +--- docs/get-started/toc.yml | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/docs/build/vscpp-step-0-installation.md b/docs/build/vscpp-step-0-installation.md index 0a5311c1fd1..903016883ab 100644 --- a/docs/build/vscpp-step-0-installation.md +++ b/docs/build/vscpp-step-0-installation.md @@ -128,7 +128,7 @@ Some benefits of using Copilot for your C++ coding scenarios: - Debug errors in your code. - Simplify and refactor existing code. -To install GitHub Copilot, see [Manage GitHub Copilot installation and state](/visualstudio/ide/visual-studio-github-copilot-install-and-states). +To try GitHub copilot to create a C++ app, follow the instructions in [Use AI to create a C++ console application in Visual Studio](../build/use-github-copilot-create-cpp-console-app.md). ::: moniker-end @@ -225,9 +225,7 @@ You can reduce the installation footprint of Visual Studio on your system drive. ### Step 8 - Start developing 1. After Visual Studio installation is complete, choose the **Launch** button to get started developing with Visual Studio. - 1. On the start window, choose **Create a new project**. - 1. In the search box, enter the type of app you want to create to see a list of available templates. The list of templates depends on the workloads that you chose during installation. To see different templates, choose different workloads. You can also filter your search for a specific programming language by using the **Language** dropdown list. You can filter by using the **Platform** list and the **Project type** list, too. diff --git a/docs/get-started/toc.yml b/docs/get-started/toc.yml index 382c539cf83..bc7a83fb976 100644 --- a/docs/get-started/toc.yml +++ b/docs/get-started/toc.yml @@ -6,7 +6,7 @@ items: href: ../build/vscpp-step-0-installation.md - name: Visual Studio guided tour href: /visualstudio/get-started/visual-studio-ide - - name: Use GitHub Copilot to create a C++ console application in Visual Studio + - name: Use AI to create a C++ console application in Visual Studio href: ../build/use-github-copilot-create-cpp-console-app.md - name: Create and edit a C++ console app project href: ../build/vscpp-step-1-create.md From 9d771a908c7544eb8b38574a041ed9ec57551d35 Mon Sep 17 00:00:00 2001 From: Jill Grant <72043882+JillGrant615@users.noreply.github.com> Date: Fri, 24 Oct 2025 16:55:36 -0600 Subject: [PATCH 16/20] Apply suggestions from code review --- docs/build/use-github-copilot-create-cpp-console-app.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/build/use-github-copilot-create-cpp-console-app.md b/docs/build/use-github-copilot-create-cpp-console-app.md index 4797c8f81ba..b70ab460381 100644 --- a/docs/build/use-github-copilot-create-cpp-console-app.md +++ b/docs/build/use-github-copilot-create-cpp-console-app.md @@ -62,7 +62,7 @@ You prompt Copilot by describing the functionality you want. In this section, yo 1. Open the Copilot chat window by selecting the Copilot icon in the toolbar: - :::image type="content" source="media/github-copilot-open-chat.png" alt-text="Screenshot of the Github icon dropdown. Open Chat Window is selected."::: + :::image type="content" source="media/github-copilot-open-chat.png" alt-text="Screenshot of the GitHub icon dropdown. Open Chat Window is selected."::: 1. In the chat window, enter the following prompt: ```copilot-prompt @@ -244,6 +244,6 @@ To install **Desktop development with C++**, you can run the installer right fro ## Next steps -- [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states)\ -- [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Dive deeper into AI-assisted development\ +- [GitHub Copilot in Visual Studio](/visualstudio/ide/visual-studio-github-copilot-install-and-states) +- [GitHub Copilot documentation](https://docs.github.com/en/copilot) - Dive deeper into AI-assisted development - [Awesome ChatGPT Prompts](https://github.com/f/awesome-chatgpt-prompts) - Community-driven prompting examples for inspiration \ No newline at end of file From b6041294c6d070bd6f06875a301a1c22b56170dc Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 24 Oct 2025 16:28:40 -0700 Subject: [PATCH 17/20] update version --- .../reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md | 2 +- ...time-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md | 2 +- docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md | 2 +- .../reference/gmtime-s-gmtime32-s-gmtime64-s.md | 2 +- .../reference/localtime-localtime32-localtime64.md | 2 +- .../reference/localtime-s-localtime32-s-localtime64-s.md | 2 +- .../reference/mkgmtime-mkgmtime32-mkgmtime64.md | 2 +- docs/c-runtime-library/reference/mktime-mktime32-mktime64.md | 2 +- docs/c-runtime-library/reference/strnlen-strnlen-s.md | 2 +- docs/c-runtime-library/reference/time-time32-time64.md | 2 +- .../reference/timespec-get-timespec32-get-timespec64-get1.md | 2 +- .../reference/utime-utime32-utime64-wutime-wutime32-wutime64.md | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index 94fb51c5db2..c6d21aac8eb 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -62,7 +62,7 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). >> [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime` and `_wctime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `ctime` and `_wctime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md index af343d723c7..12965dc90e2 100644 --- a/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md +++ b/docs/c-runtime-library/reference/ctime-s-ctime32-s-ctime64-s-wctime-s-wctime32-s-wctime64-s.md @@ -125,7 +125,7 @@ The debug library versions of these functions first fill the buffer with 0xFE. T By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `ctime_s` and `_wctime_s` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `ctime_s` and `_wctime_s` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md index aaf84a4d8cc..82ac3231da3 100644 --- a/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md +++ b/docs/c-runtime-library/reference/gmtime-gmtime32-gmtime64.md @@ -57,7 +57,7 @@ The **`_gmtime32`** function breaks down the *`sourceTime`* value and stores it By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `gmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `gmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md index dd7a15de33e..36f21d43df4 100644 --- a/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md +++ b/docs/c-runtime-library/reference/gmtime-s-gmtime32-s-gmtime64-s.md @@ -77,7 +77,7 @@ Each of the structure fields is of type **`int`**, as shown in the following tab By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `gmtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `gmtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md index fbd9bbc8ae2..b5f537a55a0 100644 --- a/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md +++ b/docs/c-runtime-library/reference/localtime-localtime32-localtime64.md @@ -73,7 +73,7 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `localtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `localtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md index 4907ef32f45..430f90328b3 100644 --- a/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md +++ b/docs/c-runtime-library/reference/localtime-s-localtime32-s-localtime64-s.md @@ -85,7 +85,7 @@ If the **`TZ`** environment variable is set, the C run-time library assumes rule By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `localtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `localtime_s` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md index 63e68cc2503..037c907886b 100644 --- a/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md +++ b/docs/c-runtime-library/reference/mkgmtime-mkgmtime32-mkgmtime64.md @@ -49,7 +49,7 @@ The range of the **`_mkgmtime32`** function is from midnight, January 1, 1970, U Both **`gmtime`** and **`localtime`** use a common static buffer for the conversion. If you supply this buffer to **`_mkgmtime`**, the previous contents are destroyed. > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_mkgmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `_mkgmtime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md index eb4af0a38fc..7f7bb31a6c9 100644 --- a/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md +++ b/docs/c-runtime-library/reference/mktime-mktime32-mktime64.md @@ -63,7 +63,7 @@ These functions validate their parameter. If *`timeptr`* is a null pointer, the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `mktime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `mktime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/strnlen-strnlen-s.md b/docs/c-runtime-library/reference/strnlen-strnlen-s.md index 12b2cedae88..ba5972caaec 100644 --- a/docs/c-runtime-library/reference/strnlen-strnlen-s.md +++ b/docs/c-runtime-library/reference/strnlen-strnlen-s.md @@ -89,7 +89,7 @@ Each of these functions returns the number of characters in *`str`*, not includi By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `strnlen_s` and `wcsnlen_s` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `strnlen_s` and `wcsnlen_s` are no longer `static inline` (internal linkage). Instead, they are `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/time-time32-time64.md b/docs/c-runtime-library/reference/time-time32-time64.md index 049d5450138..1087f1997a6 100644 --- a/docs/c-runtime-library/reference/time-time32-time64.md +++ b/docs/c-runtime-library/reference/time-time32-time64.md @@ -37,7 +37,7 @@ The **`time`** function returns the number of seconds elapsed since midnight (00 **`time`** is a wrapper for **`_time64`** and **`time_t`** is, by default, equivalent to **`__time64_t`**. If you need to force the compiler to interpret **`time_t`** as the old 32-bit **`time_t`**, you can define `_USE_32BIT_TIME_T`. We don't recommend `_USE_32BIT_TIME_T`, because your application may fail after January 18, 2038; the use of this macro isn't allowed on 64-bit platforms. > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `time` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `time` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md index ebc60ea0b92..fea1cd33a5a 100644 --- a/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md +++ b/docs/c-runtime-library/reference/timespec-get-timespec32-get-timespec64-get1.md @@ -56,7 +56,7 @@ These functions support only `TIME_UTC` as the *`base`* value. `TIME_UTC` sets t By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `timespec_get` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `timespec_get` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. diff --git a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md index 07641eeece6..84b91e8d2ea 100644 --- a/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md +++ b/docs/c-runtime-library/reference/utime-utime32-utime64-wutime-wutime32-wutime64.md @@ -85,7 +85,7 @@ Specific versions of the `_utimbuf` structure (`__utimbuf32` and `__utimbuf64`) By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> When you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_utime` and `_wutime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ +> When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `_utime` and `_wutime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. From e267562074d61e6ef0f0b5291f86b16b3a380471 Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 24 Oct 2025 16:30:53 -0700 Subject: [PATCH 18/20] fix stray version # --- .../reference/difftime-difftime32-difftime64.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md index 1eb22965f30..b1512299fa8 100644 --- a/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md +++ b/docs/c-runtime-library/reference/difftime-difftime32-difftime64.md @@ -46,7 +46,7 @@ These functions validate their parameters. If either of the parameters is zero o By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `difftime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> If you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `difftime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. From 7c6d1262c83eb51561a51f2bc257d2c056f605de Mon Sep 17 00:00:00 2001 From: TylerMSFT Date: Fri, 24 Oct 2025 16:32:58 -0700 Subject: [PATCH 19/20] fix one more stray --- .../reference/futime-futime32-futime64.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/c-runtime-library/reference/futime-futime32-futime64.md b/docs/c-runtime-library/reference/futime-futime32-futime64.md index 71e48e02fdc..43712b04947 100644 --- a/docs/c-runtime-library/reference/futime-futime32-futime64.md +++ b/docs/c-runtime-library/reference/futime-futime32-futime64.md @@ -52,7 +52,7 @@ The **`_futime`** routine sets the modification date and the access time on the By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). > [!Note] -> If you use Windows SDK version 10.0.xxxxx.xxxx and Visual Studio 2026 or later together, `_futime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ +> If you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `_futime` is no longer `static inline` (internal linkage). Instead, it's `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules. @@ -60,9 +60,9 @@ By default, this function's global state is scoped to the application. To change | Function | Required header | Optional header | |---|---|---| -| **`_futime`** | \ | \ | -| **`_futime32`** | \ | \ | -| **`_futime64`** | \ | \ | +| **`_futime`** | `` | `` | +| **`_futime32`** | `` | `` | +| **`_futime64`** | `` | `` | For more compatibility information, see [Compatibility](../compatibility.md). From d33d8b89eeb047c2d5b46b3ca69205bd1056af9a Mon Sep 17 00:00:00 2001 From: Jill Grant <72043882+JillGrant615@users.noreply.github.com> Date: Fri, 24 Oct 2025 17:48:19 -0600 Subject: [PATCH 20/20] Update docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md --- .../reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md index c6d21aac8eb..3f03733bda5 100644 --- a/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md +++ b/docs/c-runtime-library/reference/ctime-ctime32-ctime64-wctime-wctime32-wctime64.md @@ -61,7 +61,7 @@ These functions validate their parameters. If *`sourceTime`* is a null pointer, By default, this function's global state is scoped to the application. To change this behavior, see [Global state in the CRT](../global-state.md). ->> [!Note] +> [!Note] > When you use Windows SDK version 10.0.26100.6901 and Visual Studio 2026 or later together, `ctime` and `_wctime` are no longer `static inline` (internal linkage). Instead, they're `inline` (external linkage).\ > To return to the previous behavior, `#define _STATIC_INLINE_UCRT_FUNCTIONS=1` before including any CRT headers. By default, `_STATIC_INLINE_UCRT_FUNCTIONS` is set to 0.\ > This change increases UCRT conformance with the C++ standard and improves compatibility with C++ modules.