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

            Bug ID: 83342
           Summary: extern marked variable template with later definition
                    emits error
           Product: gcc
           Version: 7.2.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: dacamara.cameron at gmail dot com
  Target Milestone: ---

consider the scenario:

t.h:
#pragma once

template <typename T>
extern const int N;

t.cpp:
#include "t.h"

template <typename T>
const int N = sizeof(T);

template const int N<int>;

main.cpp:
#include <cassert>

int main() {
  assert(N<int> == sizeof(int));
}


when gcc goes to compile t.cpp we get an error:
t.cpp: In instantiation of ‘const int N<int>’:
t.cpp:7:11:   required from here
t.cpp:7:11: error: explicit instantiation of ‘N<int>’ but no definition
available [-fpermissive]
 const int N<int>;

clang/msvc allow this.  Clang links properly, msvc (currently) does not.

Reply via email to