Skip to content
2 changes: 1 addition & 1 deletion docs/build/vscpp-step-0-installation.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
title: Install C and C++ support in Visual Studio
description: "Learn how to install Visual Studio with support for Microsoft C/C++ and related workloads."
ms.custom: "mvc"
ms.custom: "vs-acquisition"
ms.date: 11/05/2020
ms.topic: "tutorial"
ms.devlang: "cpp"
Expand Down
22 changes: 13 additions & 9 deletions docs/cpp/template-specialization-cpp.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
description: "Learn more about: Template Specialization (C++)"
title: "Template Specialization (C++)"
ms.date: "11/04/2016"
ms.date: 07/09/2021
helpviewer_keywords: ["partial specialization of class templates"]
ms.assetid: f3c67c0b-3875-434a-b8d8-bb47e99cf4f0
---
Expand All @@ -17,6 +17,8 @@ Class templates can be partially specialized, and the resulting class is still a

```cpp
// partial_specialization_of_class_templates.cpp
#include <stdio.h>

template <class T> struct PTS {
enum {
IsPointer = 0,
Expand All @@ -40,24 +42,25 @@ template <class T, class U> struct PTS<T U::*> {

struct S{};

extern "C" int printf_s(const char*,...);

int main() {
printf_s("PTS<S>::IsPointer == %d PTS<S>::IsPointerToDataMember == %d\n",
printf_s("PTS<S>::IsPointer == %d \nPTS<S>::IsPointerToDataMember == %d\n",
PTS<S>::IsPointer, PTS<S>:: IsPointerToDataMember);
printf_s("PTS<S*>::IsPointer == %d PTS<S*>::IsPointerToDataMember ==%d\n"
printf_s("PTS<S*>::IsPointer == %d \nPTS<S*>::IsPointerToDataMember == %d\n"
, PTS<S*>::IsPointer, PTS<S*>:: IsPointerToDataMember);
printf_s("PTS<int S::*>::IsPointer == %d PTS"
printf_s("PTS<int S::*>::IsPointer == %d \nPTS"
"<int S::*>::IsPointerToDataMember == %d\n",
PTS<int S::*>::IsPointer, PTS<int S::*>::
IsPointerToDataMember);
}
```

```Output
PTS<S>::IsPointer == 0 PTS<S>::IsPointerToDataMember == 0
PTS<S*>::IsPointer == 1 PTS<S*>::IsPointerToDataMember ==0
PTS<int S::*>::IsPointer == 0 PTS<int S::*>::IsPointerToDataMember == 1
PTS<S>::IsPointer == 0
PTS<S>::IsPointerToDataMember == 0
PTS<S*>::IsPointer == 1
PTS<S*>::IsPointerToDataMember == 0
PTS<int S::*>::IsPointer == 0
PTS<int S::*>::IsPointerToDataMember == 1
```

## Example: Partial specialization for pointer types
Expand Down Expand Up @@ -159,6 +162,7 @@ int main() {
xp.add(&j);
xp.add(p);
xp.add(p + 1);
delete[] p;
p = NULL;
xp.add(p);
xp.print();
Expand Down
4 changes: 2 additions & 2 deletions docs/standard-library/chrono-functions.md
Original file line number Diff line number Diff line change
Expand Up @@ -538,7 +538,7 @@ In ISO 8601, weeks begin with Monday. The first week of the year must include Ja
| `year_month_weekday_last` | D, F, g, G, j, U, V, W, Y, y, C, b, h, B, m, d, e, a, A, u, w |
| `zoned_time` | z, Z, c, x, X, D, F, Y, C, y, b, B, h, m, d, e, a, A, u, w, H, I, M, S, r, R, T, p, g, G, U, V, W |

<a name="notice"></a><sup>1</sup>The implementation is currently consistent with [strftime](https://docs.microsoft.com/cpp/c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l) in that although `O` (letter O) and `e` are accepted, they are ignored. That is, `"%Od"` is interpreted as `"%d"`.
<a name="notice"></a><sup>1</sup>The implementation is currently consistent with [strftime](../c-runtime-library/reference/strftime-wcsftime-strftime-l-wcsftime-l.md) in that although `O` (letter O) and `e` are accepted, they are ignored. That is, `"%Od"` is interpreted as `"%d"`.

## <a name="std-chrono-get-leap-second-info"></a> `get_leap_second_info`

Expand Down Expand Up @@ -843,4 +843,4 @@ Unless `ToDuration` is a specialization of [`duration`](../standard-library/dura
[`chrono` operators](./chrono-operators.md)\
[`duration` class](./duration-class.md)\
[`time_point` class](./time-point-class.md)\
[`time_zone` class](./time-zone-class.md)
[`time_zone` class](./time-zone-class.md)