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

            Bug ID: 88092
           Summary: class nontype template deduction failed when providing
                    type to class
           Product: gcc
           Version: 9.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: hanicka at hanicka dot net
  Target Milestone: ---

Created attachment 45034
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=45034&action=edit
minimal example (workaround is also part of the code)

I found that a type deduction placeholder in class nontype template parameter
is not resolved properly if given as template argument to a class.

GCC 9 HEAD (commit: 20f6624). Example attached with marked problem. Also found
workaround using function template with a class nontype template parameter.




--------

Using built-in specs.
COLLECT_GCC=g++-HEAD
COLLECT_LTO_WRAPPER=/usr/local/Cellar/gcc/HEAD-20f6624/libexec/gcc/x86_64-apple-darwin18.2.0/9.0.0/lto-wrapper
Target: x86_64-apple-darwin18.2.0
Configured with: ../configure --build=x86_64-apple-darwin18.2.0
--prefix=/usr/local/Cellar/gcc/HEAD-20f6624
--libdir=/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD
--enable-languages=c,c++,objc,obj-c++,fortran --program-suffix=-HEAD
--with-gmp=/usr/local/opt/gmp --with-mpfr=/usr/local/opt/mpfr
--with-mpc=/usr/local/opt/libmpc --with-isl=/usr/local/opt/isl
--with-system-zlib --enable-checking=release --with-pkgversion='Homebrew GCC
HEAD-20f6624' --with-bugurl=https://github.com/Homebrew/homebrew-core/issues
--disable-nls --disable-multilib --with-native-system-header-dir=/usr/include
--with-sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
Thread model: posix
gcc version 9.0.0 20181118 (experimental) (Homebrew GCC HEAD-20f6624) 
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++2a'
'-mmacosx-version-min=10.14.0' '-asm_macosx_version_min=10.14' '-shared-libgcc'
'-mtune=core2'

/usr/local/Cellar/gcc/HEAD-20f6624/libexec/gcc/x86_64-apple-darwin18.2.0/9.0.0/cc1plus
-E -quiet -v -D__DYNAMIC__ cnttp2.cpp -fPIC -mmacosx-version-min=10.14.0
-mtune=core2 -std=c++2a -fpch-preprocess -o cnttp2.ii
ignoring nonexistent directory
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/local/include"
ignoring nonexistent directory
"/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD/gcc/x86_64-apple-darwin18.2.0/9.0.0/../../../../../../x86_64-apple-darwin18.2.0/include"
ignoring nonexistent directory
"/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/Library/Frameworks"
#include "..." search starts here:
#include <...> search starts here:

/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD/gcc/x86_64-apple-darwin18.2.0/9.0.0/../../../../../../include/c++/9.0.0

/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD/gcc/x86_64-apple-darwin18.2.0/9.0.0/../../../../../../include/c++/9.0.0/x86_64-apple-darwin18.2.0

/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD/gcc/x86_64-apple-darwin18.2.0/9.0.0/../../../../../../include/c++/9.0.0/backward

/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD/gcc/x86_64-apple-darwin18.2.0/9.0.0/include

/usr/local/Cellar/gcc/HEAD-20f6624/lib/gcc/HEAD/gcc/x86_64-apple-darwin18.2.0/9.0.0/include-fixed
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include
 /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/System/Library/Frameworks
End of search list.
COLLECT_GCC_OPTIONS='-v' '-save-temps' '-std=c++2a'
'-mmacosx-version-min=10.14.0' '-asm_macosx_version_min=10.14' '-shared-libgcc'
'-mtune=core2'

/usr/local/Cellar/gcc/HEAD-20f6624/libexec/gcc/x86_64-apple-darwin18.2.0/9.0.0/cc1plus
-fpreprocessed cnttp2.ii -fPIC -quiet -dumpbase cnttp2.cpp
-mmacosx-version-min=10.14.0 -mtune=core2 -auxbase cnttp2 -std=c++2a -version
-o cnttp2.s
GNU C++17 (Homebrew GCC HEAD-20f6624) version 9.0.0 20181118 (experimental)
(x86_64-apple-darwin18.2.0)
        compiled by GNU C version 9.0.0 20181118 (experimental), GMP version
6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++17 (Homebrew GCC HEAD-20f6624) version 9.0.0 20181118 (experimental)
(x86_64-apple-darwin18.2.0)
        compiled by GNU C version 9.0.0 20181118 (experimental), GMP version
6.1.2, MPFR version 4.0.1, MPC version 1.1.0, isl version isl-0.20-GMP

GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: ac5ba3fc9d630765279df693b1849957
cnttp2.cpp: In function 'constexpr void test()':
cnttp2.cpp:20:19: error: class template argument deduction failed:
   20 |  using t3 = foo<fs>; // <- this fails
      |                   ^
cnttp2.cpp:20:19: error: no matching function for call to
'fixed_string(fixed_string)'
cnttp2.cpp:7:42: note: candidate: 'template<class CharT, long unsigned int N>
fixed_string(const CharT (&)[N])-> fixed_string<CharT, N>'
    7 | template <typename CharT, std::size_t N> fixed_string(const CharT
(&str)[N]) -> fixed_string<CharT, N>;
      |                                          ^~~~~~~~~~~~
cnttp2.cpp:7:42: note:   template argument deduction/substitution failed:
cnttp2.cpp:20:19: note:   mismatched types 'const CharT [N]' and 'fixed_string'
   20 |  using t3 = foo<fs>; // <- this fails
      |                   ^
cnttp2.cpp:4:12: note: candidate: 'template<class CharT, long unsigned int N>
fixed_string(...)-> fixed_string<CharT, N>'
    4 |  constexpr fixed_string(...) { }
      |            ^~~~~~~~~~~~
cnttp2.cpp:4:12: note:   template argument deduction/substitution failed:
cnttp2.cpp:20:19: note:   couldn't deduce template parameter 'CharT'
   20 |  using t3 = foo<fs>; // <- this fails
      |                   ^
cnttp2.cpp:3:49: note: candidate: 'template<class CharT, long unsigned int N>
fixed_string(fixed_string<CharT, N>)-> fixed_string<CharT, N>'
    3 | template <typename CharT, std::size_t N> struct fixed_string {
      |                                                 ^~~~~~~~~~~~
cnttp2.cpp:3:49: note:   template argument deduction/substitution failed:
cnttp2.cpp:20:19: note:   mismatched types 'fixed_string<CharT, N>' and
'fixed_string'
   20 |  using t3 = foo<fs>; // <- this fails
      |                   ^

Reply via email to