Maybe introducing friendlier syntax for instantiating templates would work. Something like a “templating” block, similar to how the “using” block works with namespaces. 

i.e.:

templating<class SomeClass> {
auto variable = Foo::bar;
}

Which would resolve as 

auto variable = Foo<SomeClass>::bar;

WL

On Dec 20, 2021, at 1:09 PM, Hani Deek via Std-Proposals <std-proposals@lists.isocpp.org> wrote:


>
> Hello,
>
> So, let's just allow use of a types and static constants from
> not-instantiation-ed template class (if possible):
>
> template<typename T>
> struct Foo{
> constexpr static int bar = 0x01;
> };
> int i = Foo::bar; // Doesn't compile now, but could
> int j = Foo<class Nonexisting>::bar; // Ugly hack but works
>
 
I think the proposal should be to allow a namespace to have the same name as a class template.

For example,

---------------------------------
namespace Foo
{
  constexpr int bar = 0x01;
}

template<typename T>
struct Foo
{
   static constexpr T bar = 0x02;
};

int i = Foo::bar; //Foo is a namespace name
int j = Foo<short>::bar; //Foo is a class template name
---------------------------------

In order for this proposal to work, we will need to add new rules to the name lookup rules. We will need to define contexts in which a name is assumed to be a namespace name rather than a template name, and other contexts for the opposite assumption. We will also need a disambiguation mechanism for contexts where both a namespace name and a template name may be used.

Adding those new name lookup rules will be a radical change to C++, and I think that many people will oppose the proposal on the grounds that the benefits are not worth the hassle.
--
Std-Proposals mailing list
Std-Proposals@lists.isocpp.org
https://lists.isocpp.org/mailman/listinfo.cgi/std-proposals