### 2922. The `*_constant<>` templates do not make use of `template<auto>`

**Section:** 21.3.3 [meta.type.synop] **Status:** LEWG
**Submitter:** United States **Opened:** 2017-02-03 **Last modified:** 2017-07-15 23:15:19 UTC

**Priority: **Not Prioritized

**View other** active issues in [meta.type.synop].

**View all other** issues in [meta.type.synop].

**View all issues with** LEWG status.

**Discussion:**

**Addresses US 171**
The `*_constant<>` templates (including the proposed addition, `bool_constant<>`) do
not make use of the new `template<auto>` feature.

Proposed change: Add a `constant<>` (subject to bikeshedding) template which uses `template<auto>`.

Define `integral_constant<>` as `using integral_constant<T, V> = constant<T(V)>` or `integral_constant<T, V> = constant<V>`.

Either remove `bool_constant`, define it as using `bool_constant = constant<bool(B)>` or
`using bool_constant = constant<B>`.

*[2017-03-03, Kona, LEWG]*

Straw polls:

Name:
`constant` | 3 |

`numeric_constant` | 8 |

`static_constant` | 1 |

`scalar_constant` | 7 |

`integer_constant` (Over LWG's dead body) | 1 |

`auto_constant` | 4 |

`integral_c` | 7 |

`int_` | 0 |

`` |

`scalar_constant` | 6 |

`numeric_constant` | 3 |

`integral_c` | 5 |

Accept P0377 with "`scalar_constant`" for C++17 to address LWG 2922 and US 171:

SF | F | N | A | SA

0 | 1 | 3 | 7 | 5

*[2017-07 Toronto Thurs Issue Prioritization]*

Status LEWG with P0377

**Proposed resolution:**