public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
From: "brignon.enzo at protonmail dot com" <gcc-bugzilla@gcc.gnu.org>
To: gcc-bugs@gcc.gnu.org
Subject: [Bug c++/109084] New: requires keyword can't access private static constexpr bool in templated class
Date: Thu, 09 Mar 2023 19:33:44 +0000	[thread overview]
Message-ID: <bug-109084-4@http.gcc.gnu.org/bugzilla/> (raw)

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109084

            Bug ID: 109084
           Summary: requires keyword can't access private static constexpr
                    bool in templated class
           Product: gcc
           Version: 12.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: brignon.enzo at protonmail dot com
  Target Milestone: ---

Created attachment 54626
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=54626&action=edit
The minimal reproduction file (not preprocessed because it does not include
anything)

When using requires keyword to enable class member function using a private
static constexpr bool (eventually the value of a concept) in a templated class
gcc fails to access the given boolean variable because it is private within its
context. 
It does not fail if the boolean is public or if the class is not templated.

You can find a minimal example (not preprocessed because it needs no include)
in attachment.

Output of gcc -v:
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-pc-linux-gnu/12.2.1/lto-wrapper
Target: x86_64-pc-linux-gnu
Configured with: /build/gcc/src/gcc/configure
--enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++,d --enable-bootstrap
--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man
--infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/
--with-build-config=bootstrap-lto --with-linker-hash-style=gnu
--with-system-zlib --enable-__cxa_atexit --enable-cet=auto
--enable-checking=release --enable-clocale=gnu --enable-default-pie
--enable-default-ssp --enable-gnu-indirect-function --enable-gnu-unique-object
--enable-libstdcxx-backtrace --enable-link-serialization=1
--enable-linker-build-id --enable-lto --enable-multilib --enable-plugin
--enable-shared --enable-threads=posix --disable-libssp --disable-libstdcxx-pch
--disable-werror
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 12.2.1 20230201 (GCC) 

The file is complied with following options:
g++ -std=c++20 bug.cpp

Output of gcc:

bug.cpp: In function 'int main()':
bug.cpp:12:15: error: class template argument deduction failed:
   12 |     MyClass c{};
      |               ^
bug.cpp:12:15: error: no matching function for call to 'MyClass()'
bug.cpp:8:5: note: candidate: 'template<class T, class Enable>  requires 
MyClass<T>::cond MyClass()-> MyClass<T>'
    8 |     MyClass() {}
      |     ^~~~~~~
bug.cpp:8:5: note:   template argument deduction/substitution failed:
bug.cpp:8:5: note: constraints not satisfied
bug.cpp: In substitution of 'template<class T, class Enable>  requires 
MyClass<T>::cond MyClass()-> MyClass<T> [with T = int; Enable = void]':
bug.cpp:12:15:   required from here
bug.cpp:8:5:   required by the constraints of 'template<class T, class Enable> 
requires  MyClass<T>::cond MyClass()-> MyClass<T>'
bug.cpp:12:15: error: 'constexpr const bool MyClass<int>::cond' is private
within this context
   12 |     MyClass c{};
      |               ^
bug.cpp:5:27: note: declared private here
    5 |     static constexpr bool cond = true;
      |                           ^~~~
bug.cpp:3:7: note: candidate: 'template<class T> MyClass(MyClass<T>)->
MyClass<T>'
    3 | class MyClass {
      |       ^~~~~~~
bug.cpp:3:7: note:   template argument deduction/substitution failed:
bug.cpp:12:15: note:   candidate expects 1 argument, 0 provided
   12 |     MyClass c{};
      |

             reply	other threads:[~2023-03-09 19:33 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-03-09 19:33 brignon.enzo at protonmail dot com [this message]
2023-03-09 21:12 ` [Bug c++/109084] [10/11/12/13 Regression] " pinskia at gcc dot gnu.org
2023-03-09 23:07 ` ppalka at gcc dot gnu.org
2023-03-09 23:12 ` ppalka at gcc dot gnu.org
2023-03-10  8:07 ` rguenth at gcc dot gnu.org
2023-07-07 10:45 ` [Bug c++/109084] [11/12/13/14 " rguenth at gcc dot gnu.org

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bug-109084-4@http.gcc.gnu.org/bugzilla/ \
    --to=gcc-bugzilla@gcc.gnu.org \
    --cc=gcc-bugs@gcc.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).