From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2181) id 525FE382EF19; Thu, 24 Nov 2022 16:36:26 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 525FE382EF19 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1669307786; bh=ZMNGXKtt/ZykQ6aLHoDIBGG7arPK89Zsk08gIUUL72Q=; h=From:To:Subject:Date:From; b=wBkFmlv1ltr912ABdqFnXXfP6KYDhKROoRq0lNGBN9YKJ7S663m2HFHfg9AZQZH2k sD6bYaSoguw94oIo543BuYOVUIVIkJwiV4yUwk9rdd/SOgEpQMcf2PskF3Ph7Iq+9C Xq1jPZGyyqfsVxYQeBS9jTew02IDhWvIi5hMU3HQ= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Jonathan Wakely To: gcc-cvs@gcc.gnu.org, libstdc++-cvs@gcc.gnu.org Subject: [gcc r12-8935] libstdc++: Check static assertions earlier in chrono::duration X-Act-Checkin: gcc X-Git-Author: Jonathan Wakely X-Git-Refname: refs/heads/releases/gcc-12 X-Git-Oldrev: 6e3b2c0d5e676e1cba1c27b95dd850e5cc33f9e1 X-Git-Newrev: d9b0e012ab939568f5ccbefc4a68ba515e66f4b5 Message-Id: <20221124163626.525FE382EF19@sourceware.org> Date: Thu, 24 Nov 2022 16:36:26 +0000 (GMT) List-Id: https://gcc.gnu.org/g:d9b0e012ab939568f5ccbefc4a68ba515e66f4b5 commit r12-8935-gd9b0e012ab939568f5ccbefc4a68ba515e66f4b5 Author: Jonathan Wakely Date: Mon Nov 21 11:52:34 2022 +0000 libstdc++: Check static assertions earlier in chrono::duration This ensures that we fail a static assertion before giving any other errors. Instantiating chrono::duration will now print this before the other errors caused by it: error: static assertion failed: period must be a specialization of ratio libstdc++-v3/ChangeLog: * include/bits/chrono.h (duration): Check preconditions on template arguments before using them. (cherry picked from commit ed77dcb9be76e592b62449c75a5e751485514afd) Diff: --- libstdc++-v3/include/bits/chrono.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/libstdc++-v3/include/bits/chrono.h b/libstdc++-v3/include/bits/chrono.h index 421898516ae..65e3e3183f7 100644 --- a/libstdc++-v3/include/bits/chrono.h +++ b/libstdc++-v3/include/bits/chrono.h @@ -442,6 +442,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION template struct duration { + static_assert(!__is_duration<_Rep>::value, "rep cannot be a duration"); + static_assert(__is_ratio<_Period>::value, + "period must be a specialization of ratio"); + static_assert(_Period::num > 0, "period must be positive"); + private: template using __is_float = treat_as_floating_point<_Rep2>; @@ -487,11 +492,6 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION using rep = _Rep; using period = typename _Period::type; - static_assert(!__is_duration<_Rep>::value, "rep cannot be a duration"); - static_assert(__is_ratio<_Period>::value, - "period must be a specialization of ratio"); - static_assert(_Period::num > 0, "period must be positive"); - // 20.11.5.1 construction / copy / destroy constexpr duration() = default;