[Bug c++/53039] New: [C++11]including <functional> breaks std::is_convertible with template-pack expansion
mitchnull+gcc at gmail dot com
gcc-bugzilla@gcc.gnu.org
Thu Apr 19 07:57:00 GMT 2012
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53039
Bug #: 53039
Summary: [C++11]including <functional> breaks
std::is_convertible with template-pack expansion
Classification: Unclassified
Product: gcc
Version: 4.8.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
AssignedTo: unassigned@gcc.gnu.org
ReportedBy: mitchnull+gcc@gmail.com
Created attachment 27185
--> http://gcc.gnu.org/bugzilla/attachment.cgi?id=27185
test code
#include <functional> in the following code causes compile failure. Without the
include, it compiles fine:
#include <type_traits>
#include <functional> // without this include, it compiles
template <bool... Bs_>
struct Bools {
static const bool value = true;
};
template <typename... Ts_>
struct Types {
template <typename... Us,
typename std::enable_if<
Bools<std::is_convertible<Us, Ts_>::value...>::value,
bool>::type = false>
int foo(Us&&...) {
return sizeof...(Us);
}
};
int main() {
Types<int, int> t;
return t.foo(1, 1);
}
Output:
$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-unknown-linux-gnu/4.7.0/lto-wrapper
Target: x86_64-unknown-linux-gnu
Configured with: /build/src/gcc-4.7-20120324/configure --prefix=/usr
--libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man
--infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/
--enable-languages=c,c++,ada,fortran,go,lto,objc,obj-c++ --enable-shared
--enable-threads=posix --with-system-zlib --enable-__cxa_atexit
--disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch
--enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id
--with-ppl --enable-cloog-backend=isl --enable-lto --enable-gold
--enable-ld=default --enable-plugin --with-plugin-ld=ld.gold
--with-linker-hash-style=gnu --disable-multilib --disable-libssp
--disable-build-with-cxx --disable-build-poststage1-with-cxx
--enable-checking=release
Thread model: posix
gcc version 4.8.0 20120407 (experimental) [trunk revision 186212] (Debian
20120407-1)
$ /usr/lib/gcc-snapshot/bin/g++ -std=c++11 functional_bug.cpp
functional_bug.cpp: In instantiation of 'struct Types<int, int>':
functional_bug.cpp:21:21: required from here
functional_bug.cpp:15:9: error: wrong number of template arguments (3, should
be 2)
In file included from functional_bug.cpp:1:0:
/usr/lib/gcc-snapshot/lib/gcc/i486-linux-gnu/4.8.0/../../../../include/c++/4.8.0/type_traits:1264:12:
error: provided for 'template<class _From, class _To> struct
std::is_convertible'
functional_bug.cpp: In function 'int main()':
functional_bug.cpp:22:14: error: 'struct Types<int, int>' has no member named
'foo'
More information about the Gcc-bugs
mailing list