[Bug c++/72761] New: the "using" keyword has different behaviors
liweifriends at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Jul 31 13:33:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72761
Bug ID: 72761
Summary: the "using" keyword has different behaviors
Product: gcc
Version: 5.3.1
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: liweifriends at gmail dot com
Target Milestone: ---
The following code is correct:
template <typename T> using Check = std::remove_const<T>;
And the following code is not correct:
template <typename T> using Check = std::remove_const;
However, the following code cannot be compiled
=====================================================================
template <template<typename> class TLayer>
struct SubLayer
{
template <typename T>
using Layer = TLayer<T>;
};
template <typename...T> struct SubLayerContainer;
template <typename TOrderedSublayerCont> struct LayerTemp2Type;
template <typename TCur, typename...TSublayers>
struct LayerTemp2Type<SubLayerContainer<TCur, TSublayers...>>
{
// Code that cannot compile
template <typename T>
using Check = typename TCur::Layer template <T>;
};
====================================================================
g++ -Wall -fexceptions --std=c++14 -g --std=c++14 -c
/home/liwei/check/main.cpp -o obj/Debug/main.o
Error: expected ‘;’ before ‘template’
I have to modify the above code as follows to pass the compile:
=====================================================================
template <template<typename> class TLayer>
struct SubLayer
{
template <typename T>
using Layer = TLayer<T>;
};
template <typename...T> struct SubLayerContainer;
template <typename TOrderedSublayerCont> struct LayerTemp2Type;
template <typename TCur, typename...TSublayers>
struct LayerTemp2Type<SubLayerContainer<TCur, TSublayers...>>
{
template <typename T>
using Check = typename TCur::Layer;
};
=====================================================================
More information about the Gcc-bugs
mailing list