[Bug c++/77302] New: partial specialization marked as ambiguous
rlangendam at gmail dot com
gcc-bugzilla@gcc.gnu.org
Fri Aug 19 18:55:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77302
Bug ID: 77302
Summary: partial specialization marked as ambiguous
Product: gcc
Version: 6.1.1
Status: UNCONFIRMED
Severity: minor
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: rlangendam at gmail dot com
Target Milestone: ---
Created attachment 39475
--> https://gcc.gnu.org/bugzilla/attachment.cgi?id=39475&action=edit
C++ source file that wrongfully fails to compile
Compiling the attached C++ source file with g++ 6.1.1 20160802, as described
below, yields an ambiguity error wrongfully. After all, out of the two
mentioned partial specializations, the former is more specialized than the
latter. FYI, the file compiles fine using clang++ 3.8, using the same options.
$ g++ -std=c++11 -c test.cpp
test.cpp:15:64: error: ambiguous template instantiation for ‘struct
Test<std::integral_constant<int, 0> >’
static_assert(std::is_same<Test<std::integral_constant<int, 0>>::type,
void>::value, "");
^~
test.cpp:6:8: note: candidates are: template<class T> struct
Test<std::integral_constant<T, 0> > [with T = int]
struct Test<std::integral_constant<T, 0>> {
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.cpp:11:8: note: template<class T, T V> struct
Test<std::integral_constant<T, V> > [with T = int; T V = 0]
struct Test<std::integral_constant<T, V>> :
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.cpp:15:28: error: incomplete type ‘Test<std::integral_constant<int, 0> >’
used in nested name specifier
static_assert(std::is_same<Test<std::integral_constant<int, 0>>::type,
void>::value, "");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test.cpp:15:28: error: incomplete type ‘Test<std::integral_constant<int, 0> >’
used in nested name specifier
test.cpp:15:76: error: template argument 1 is invalid
static_assert(std::is_same<Test<std::integral_constant<int, 0>>::type,
void>::value, "");
More information about the Gcc-bugs
mailing list